Ух ты, это действительно какой-то невероятный мусорный код.
Нет оправдания этому.
И не только инициализация val
не нужна, факт заключается в том, что state[0]
является int32_t
, а умножение на 1103515245
будет запускать неопределенное поведение в GCC (целочисленное переполнение) на любой платформе с 32-битной int
s (= в основном каждая). А GCC - это компилятор, наиболее часто используемый для компиляции Glibc.
Как отмечает HostileFork , код более поздней версии 2.28 гласит:
int32_t val = ((state[0] * 1103515245U) + 12345U) & 0x7fffffff;
state[0] = val;
*result = val;
При этом не только удаляется бесполезная инициализация, но суффикс U
позволяет умножению происходить с целыми числами без знака, избегая неопределенного поведения. & 0x7fffffff
гарантирует, что полученное значение вписывается в int32_t
и является положительным.