我使用来自cstdlib和g ++的rand和srand作为编译器。我正在试图生成一些伪随机数,我得到了一些意想不到的偏差结果。我很好奇所以我写了一个简单的函数。预期的行为将是生成1到10之间的随机数并打印出来以筛选100x。平均值的期望值应为5.但是,当我运行此函数时,它将生成一个介于1和10之间的单个随机数,并将其打印100x&s,平均值等于生成的随机数。
#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初始返回,它将在循环的持续时间内保持7,并且每次调用bs()。输出将自动添加到100x并且平均值将等于 gasp 7.这里发生了什么?
答案 0 :(得分:0)
种子只能涂一次。移动
srand(time(0));
到循环前的主要部分。