我在尝试生成随机数时遇到了一个问题,它输出每秒递增 3 的升序数字序列。我正在使用 mingw g++ 6.3.0 和以下编译器标志:-std=c++11 -Wall。
例如,运行以下代码并多次运行可执行文件后,它会提供以下输出:
main.cpp:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
std::srand(std::time(0));
int rnd = std::rand();
std::cout << rnd << '\n';
return 0;
}
控制台输出:
C:\...>make
g++ main.cpp -std=c++11 -Wall -o a.exe
C:\...>a
21154
C:\...>a
21157
C:\...>a
21157
C:\...>a
21157
C:\...>a
21160
C:\...>a
21160
C:\...>a
21163
C:\...>a
21163
好吧,
rand()
将为给定的种子返回相同的数字序列,这就是为什么你每秒都会看到变化(你用以秒为单位的时间来播种它)。
至于每次增加 3,
std::rand
不保证产生任何特定质量的序列,并且您的序列似乎特别不那么好(对于 rand
来说并不罕见)。 <random>
中有质量更好的生成器(请参阅文档此处)。