【问题标题】:C++ and rand/srand behavior not performing as expectedC++ 和 rand/srand 行为未按预期执行
【发布时间】: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。这是怎么回事?

【问题讨论】:

    标签: random srand


    【解决方案1】:

    种子只能施用一次。移动

    srand(time(0));
    

    到循环之前的main。

    【讨论】:

      猜你喜欢
      • 2020-12-12
      • 2013-08-20
      • 2017-12-15
      • 2011-02-25
      • 2012-11-23
      • 2014-10-20
      • 2015-09-17
      • 2015-07-22
      • 1970-01-01
      相关资源
      最近更新 更多