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