我正在尝试使用简单的结构在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();

10-06 06:53