【发布时间】:2016-04-28 01:15:38
【问题描述】:
我正在使用来自 cstdlib 和 g++ 的 rand 和 srand 作为编译器。我一直在尝试生成一些伪随机数,但得到了一些意想不到的有偏见的结果。我很好奇,所以我写了一个简单的函数。预期的行为将是生成 1 到 10 之间的随机数并打印出来以筛选 100 倍。平均值的预期值应该是 5。但是,当我运行此函数时,它将生成一个介于 1 和 10 之间的随机数并打印 100 倍,平均值等于生成的随机数。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
float bs(){
float random;
srand(time(0));
random = rand() % 10 + 1;
return random;
}
int main(){
float average;
float random;
for (int i = 1; i < 101; ++i)
{
random += bs();
cout << random << endl;
}
average = random/100;
cout << average << endl;
return 0;
}
如果从 bs = 7 的初始返回,它将在循环期间和每次调用 bs() 时保持 7。输出将是 7 添加到自身 100 倍,平均值将等于 gasp 7。这是怎么回事?
【问题讨论】: