language-agnostic - 这个随机双生成器能工作吗?

标签 language-agnostic random floating-point double probability

凭直觉,人们可能会编写一个随机 double 生成器,如下所示:

double randDouble(double lowerBound, double upperBound)
{
    double range = upperBound - lowerBound;
    return lowerBound + range * rand();
}

假设我们假设 rand() 在区间 [0, 1) 上返回均匀分布的伪随机 double 值。

此方法是否保证返回 [lowerBound, upperBound) 内具有均匀概率分布的随机 double 值?我特别感兴趣的是浮点计算的性质是否可能导致某些范围的最终分布出现尖峰或下降。

最佳答案

首先,rand() 生成伪随机数字,而不是真正的随机数。因此,我假设您询问您的函数是否生成指定范围内的伪随机数。

其次,正如 Oli Charlesworth 所说,许多 rand 实现返回 0 到 RAND_MAX 之间的数字,其中 RAND_MAX 是它可以取的最大可能值。在这些情况下,您可以通过以下方式获取 [0, 1) 中的值

double r = rand()/((double)RAND_MAX+1);

+1 的存在使得 r 不能为 1。

其他语言的 rand 返回 0 到 1 之间的值,在这种情况下您不需要进行上述除法。不管怎样,事实证明你的函数返回了随机分布的一个不错的近似值。有关更多详细信息,请参阅以下链接:http://www.thinkage.ca/english/gcos/expl/c/lib/rand.html请注意,此链接为您提供了略有不同的功能,他们声称这些功能更好一点,但您拥有的功能可能已经足够好了。

关于language-agnostic - 这个随机双生成器能工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116008/

相关文章:

language-agnostic - 编程的理想键盘布局

algorithm - 如何使用生成 [0.0, 1.0) 之间的 float 的随机生成器生成 [1, n] 之间的随机数

c++ - 像这样声明浮点常量有什么特别的理由吗? (C 和 C++)

java - 如何在 Spark sql 中舍入值

c++ - 在 C++ 中查找小于特定整数值的最接近浮点值?

unit-testing - 单元测试预期和非预期死锁行为的明智策略

multithreading - 什么时候多线程不是一个好主意?

ruby-on-rails - Ruby 从数组中随机选择有时会重复返回相同的值

c# - Random.Next 不起作用?

language-agnostic - 成为万事通程序员的好处和优势?