【发布时间】:2016-09-08 03:51:38
【问题描述】:
我正在尝试使用 c++ 生成随机数,但它们似乎不是很随机。我当然知道它们只是伪随机,但我发现实际上甚至没有将其切割为伪随机。这是我的代码
#include <iostream>
#include <time.h>
int main(){
srand (time(NULL));
std::cout << (double) rand() / (double) RAND_MAX;
return 0;
}
我编译和运行这个 cpp 文件得到的结果总是以 0.63 开头,后面跟着一些看似随机的数字。
我有什么遗漏吗?我没有使用 srand 正确初始化随机数生成器吗?为什么数字在 0 和 1 之间不是随机的?
谢谢
【问题讨论】:
-
您能否添加您认为缺少的随机数样本?还有你在什么平台上运行?
-
rand()返回一个介于 0 和RAND_MAX之间的数字,而不是 0 和 1。RAND_MAX被定义为“至少 32767”。例如,假设RAND_MAX是 2147483647,那么rand()必须返回大约介于 1352914697 和 1372242050 之间的值,以便您的计算产生介于 0.630 和 0.639 之间的结果。这是一个相当大范围的随机数。另一方面,您使用的是旧的 Crand()函数,而您应该使用 C++ 自己的 random number generators。 -
@RemyLebeau 查看微软版本的
RAND_MAX。很郁闷。 -
也使用
#include <stdlib.h>