C++ 是否限制 std::rand 的周期?

Jas*_*n C 4 c++ random language-lawyer

C++ 标准是否对 返回的序列的最小/最大周期有任何限制std::rand

Rev*_*lot 8

不。

28.5.10 说“rand 和 srand 函数具有 C 标准库中指定的语义。”

C17标准只有这样的规定rand

rand 函数计算 0 到 RAND_MAX 范围内的伪随机整数序列。
不需要 rand 函数来避免与其他对伪随机序列生成函数的调用发生数据竞争。实现的行为应如同没有库函数调用 rand 函数一样。
rand 函数返回一个伪随机整数。
RAND_MAX 宏的值至少应为 32767

有脚注

“无法保证所生成的随机序列的质量,并且已知某些实现会生成具有令人痛苦的非随机低位位的序列。具有特定要求的应用程序应使用已知足以满足其需求的生成器。 ”

没有期限、质量的限制。交替返回 0 和 1 的函数符合标准。