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