【问题标题】:Random integral numbers from uniform distribution来自均匀分布的随机整数
【发布时间】:2015-09-05 03:38:00
【问题描述】:

我必须编写一个 c++ 程序并且只有以下部分有问题:

[...] 为此,您将需要两个随机整数 在集合 {0,1,...,9} 上的均匀分布(这两个数必须 以相等的概率生成)[...]

我对数学的了解不如 c++,我也不允许使用 c++11。我写了以下简单的代码,但我怀疑它是否正确? :P

//...
srand(time(0));
int first_number = rand() % 10;
int second_number = rand() % 10;
//...

【问题讨论】:

标签: c++ random


【解决方案1】:

每个程序只调用一次srand,而不是每次你想要一个随机数时。对随机数使用模数技巧通常不会给出均匀分布。所以不,解决方案可能不正确。

【讨论】:

  • 您看到两个对 srand 的调用吗?也许我应该给自己买一副更好的眼镜。
  • @JanGąser 我无法从您的代码片段中看出,但如果它在您多次调用的函数中,它将被多次调用。
【解决方案2】:

这取决于您是否需要它是真正统一的,或者只是非常接近。您的解决方案很接近但并不完美。

假设您使用的是 Microsoft 的 C++,它有一个 RAND_MAX of only 32767。你得到 0 到 7 的几率是 3277/32768,而你得到 8 或 9 的几率只有 3276/32768。

StackOverflow 上有很多关于如何获得完美分布的问题,比如这个:What is the optimal algorithm for generating an unbiased random integer within a range?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2021-12-28
    • 2011-08-23
    • 2020-04-04
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多