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中有办法做到这一点吗?
答案 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倍,这很可能反映了它的标准等效性。如果速度是一个因素,那么这可能会起作用。