【问题标题】:Using boost for (pseudo-)random number generator of long double对 long double 的(伪)随机数生成器使用 boost
【发布时间】:2012-03-08 09:48:41
【问题描述】:

我正在尝试使用 boost 来生成 long double 的随机数(在 64 位机器上)。

有时我会使用

rng = boost::mt19937();

但是,编译器认为在 boost/random/mersenne_twister.hpp 的第 88 行,

x[i] = (1812433253UL * (x[i-1] ^ (x[i-1] >> (w-2))) + i) & mask;

有一个隐式转换将 64 位缩短为 32 位值...

我什至没有指定我想要一个长双打还是双打……他为什么要争论这个?是因为我使用的是 64 位操作系统吗?

这个问题有什么简单的解决方法吗?我需要一个长的双发电机... xD

谢谢

【问题讨论】:

    标签: c++ boost-random


    【解决方案1】:

    mt19937 是 32 位的。它是在 boost 中定义的

    typedef mersenne_twister_engine<uint32_t,32,624,397,31,0x9908b0df,
    11,0xffffffff,7,0x9d2c5680,15,0xefc60000,18,1812433253> mt19937;
    

    64位需要使用mt19937_64

    【讨论】:

    • 它也没有用:现在在这里抱怨:random/detail/large_arithmetic.hpp 的第 99-100 行(提升版本 1.49.0)
    • 奇怪。我创建了一个小测试。在 VC10 上编译没有任何警告或错误消息。这是源代码的link。无法在评论中发布代码。超出限制。在VC10上编译没有问题。由于缺少mt19937_64 类,在线编译器会产生错误。您能否发布无法编译的示例代码?
    猜你喜欢
    • 2011-01-16
    • 2014-05-18
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2021-05-13
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多