c++ - [0..1[中的随机实数使用 Mersenne Twister

标签 c++ random prng mersenne-twister

我正在尝试使用简单的结构在 C++ 中制作僵尸启示录模型,当我随机化人口时,我需要结构的某些字段在区间 [0..1[ .由于我对统计上更正确的分析感兴趣,因此我选择使用 mt19937 引擎来生成我的“数据”。在玩这个 PRNG 时,我找不到生成上述范围内数字的方法。这是我想出的代码:

int
main ( int argc, char** argv )
{

    mt19937_64 newr ( time ( NULL ) );
    std::cout << newr.max ( ) << endl;
    std::cout << newr.min ( );
    double rn;
    for(;;){
        rn = newr()/newr.max ();
        std::cout << rn << std::endl;
    }
}

但我为循环获得的唯一输出是零 (0)。输出的一小部分已关闭:

18446744073709551615
0
0
0
0
0
0
0
0
0
0
0

有什么想法吗?

最佳答案

发生这种情况是因为 newr()newr.max() 的返回值是整数,而 newr() 返回的值比 newr.mar()。除法的结果是一个零整数,然后将其转换为double。解决这个问题

rn = static_cast<double>(newr()) / newr.max();

关于c++ - [0..1[中的随机实数使用 Mersenne Twister,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27714032/

相关文章:

c++ - 未处理的 CDBException,同时具有适当的 "catch"

c++ - cmake 链接 glew 头文件

c++ - 我应该删除一个取消引用的指针数组吗?

python - 类型错误 : 'int' object is not callable in np. 随机种子

security - 在对其输出进行 SHA-1 处理后,可预测的随机数生成器如何(如果有的话)变得更加安全?

c++ - 随机浮点发生器

algorithm - 在不同概率范围内生成随机数

python - 在numpy中生成随机数的函数之间的区别

c++ - 偏置随机数生成器的可能方法是什么?

java - 在java中播种一个安全的随机数