随机数生成器确认

问题描述 投票:0回答:1

我只是想知道下面的代码是否真的包含值3.0? (我知道 rand() 不是最好的,但我只是想尝试一下)

//function returns random double value between specificed range, inclusively.
double randomDouble (double minVal, double maxVal) {
    return double(rand()) / RAND_MAX * (maxVal - minVal) + minVal;
}

我的逻辑是这样的

  1. double(rand()) / RAND_MAX 给出 0.0 到 1.0 范围内的随机数(含)
  2. (maxVal - minVal) 然后将其转换为 0.0 到 MaxVal(含)
  3. 添加 minVal 最终为我们提供了从 minVal 到 maxVal(含)的随机双精度值。

因此,我尝试通过运行以下代码来测试它们是否真的包含 maxVal:

int cnt = 0;
for (int i = 0; i < 999999999; i++) {
    if (randomDouble(1.0, 3.0) == 3.0) {
        cnt++;
    }
}
cout << cnt << endl;

但 cnt 始终为零。

所以我不确定我的功能是否正确?

c++ random srand
1个回答
0
投票

如果

maxVal
恰好返回
rand()
,则函数返回
RAND_MAX
的唯一方法。这种情况非常罕见,测试 999999999 次可能还不足以达到目的。

© www.soinside.com 2019 - 2024. All rights reserved.