我试图从[0,1]范围内的实数均匀分布中生成数字。但编译器正在生成超出[0,1]范围的数字。
以下是代码:
int main(void) {
// Solver solve;
mt19937 mteng;
mteng.seed(rdtsc());
uniform_real<double> uniRealD;
double randomNum;
for (int index = 0; index < 10; index++){
randomNum = uniRealD(mteng);
if(randomNum<0.5)
cout<<index<<" no. random number is: "<<randomNum<<endl;
else
cout<<"number generate is not in range"<<endl;
}
return 0;
}
对代码可能出错的任何评论?我使用rdtsc()
作为种子。
答案 0 :(得分:2)
您的代码不应该这样做。可能是实施中的一个错误。什么编译器和库版本?尝试从tr1转到C ++ 11。
答案 1 :(得分:2)
我必须摆脱你的种子功能,rdtsc()
,制作一些包含,引入using namespace std
,然后将0.5更改为1.0,并将uniform_real
更改为{{1} },但在那之后,使用libc ++,我得到:
uniform_real_distribution
答案 2 :(得分:1)
if(randomNum<0.5)
cout<<index<<" no. random number is: "<<randomNum<<endl;
else
cout<<"number generate is not in range"<<endl;
将if
语句更改为if(randomNum < 1.)