Boost Mersenne Twister / 53位精度双随机值

时间:2019-01-18 15:00:16

标签: c++ boost

Boost库具有Mersenne Twister随机数生成器,使用Boost Random库,我可以将其转换为双精度值。

boost::random::mt19937 rng;         // produces randomness out of thin air
                                    // see pseudo-random number generators
boost::random::uniform_real_distribution<> dblvals(0,1);
                                    // distribution that maps to 0..1
                                    // see random number distributions
double x = dblvals(rng);                   // get the number

内部看起来好像是使用一种接受/拒绝方法来生成随机数。

由于用于创建double的基础整数是32位,所以我认为这意味着我得到了一个32位分辨率的随机数,换句话说,就是32位的随机性。

原始的mt19937ar.c具有一个名为genrand_res53()的函数,该函数生成具有53位分辨率(使用两个32位整数)的随机数。在Boost中有办法做到这一点吗?

2 个答案:

答案 0 :(得分:0)

与C ++现在提供的功能(自11开始)类似,boost中有mt19937_64,请看here

答案 1 :(得分:0)

如果必须使用boost,可以使用boost::random::mt19937_64来获得64位随机性。如果您可以使用C ++ 11或更高版本,则还可以使用std::mt19337_64,它还会为您提供64个随机位。

我会注意到,每boost's listing boost::random::mt19937_64的运行速度比boost::random::mt19937慢约2.5倍,这很可能反映了它的标准等效性。如果速度是一个因素,那么这可能会起作用。