Я понимаю, что RAND_MAX зависит от архитектуры машины. Если машина 32 бит, то rand() будет генерировать только что-то до 4 байт. Как создать 32-битное случайное целое число на 64-битной машине с помощью rand()?
Кроме того, мне всегда нужен srand(), если я хочу генерировать миллиарды случайных целых чисел с rand() позже?
Поскольку вы используете rand() уже, вам, вероятно, не нужно беспокоиться о периоде, поэтому вы можете просто скрыть верхние биты.
В общем, вы должны сделать что-то вроде srand(time(NULL))
один раз в верхней части вашей программы. В противном случае вы будете генерировать одну и ту же последовательность из миллиардов случайных чисел каждый раз, когда вы запускаете программу.
Использование rand() с бит-взломом серьезно обескуражено, так как во многих случаях это может привести к проблемам случайности.
Заголовок С++ 11 <random>
определяет все инструменты, необходимые для создания произвольных случайных чисел хорошего качества, включая целое число любой длины, с плавающей запятой и т.д.
Я предлагаю посмотреть это: https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
(uint32)rand()