c ++随机数生成器:std :: rand()vs RANMAR:最小的double

时间:2014-09-09 17:22:44

标签: c random

我最近发现了一些让我烦恼的事情......

我使用RANMAR算法生成随机数。据说它是目前最好的算法(如果你知道更好的算法,请告诉我)。

我真的很惊讶地注意到它能产生的最小双倍大约是1e-8。

所以我尝试使用std::rand()使用常见的

(double)rand() / RAND_MAX;

生成双倍的方式,我注意到最小的数字大约是1e-9。我有点理解,在这种情况下,因为1.0/RAND_MAX大致是1.0/2^31 ~ 1e-9(在我的计算机上,我知道RAND_MAX可以有不同的值。)

因此我想知道是否有可能在[0:1]之间生成随机双倍,其中可能的最小值接近机器精度。

[编辑]

我只想更精确......当我说生成的最小数字是1e-9时,我也应该说下一个是0。因此,1e-9和0之间存在巨大差距(无穷大数字),将被视为0。我的意思是,如果你做以下测试

double x(/*is a value computed somehow in your code that is small ~1e-12*/);
if(x>rand()){ /*will be true for all random number generated that are below 1e-9*/}

所以这个条件对于太多的数字都是正确的......

[/编辑]

0 个答案:

没有答案