我试图从 [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()
作为种子。
我不得不去掉你的种子功能,rdtsc()
,做一些包含,引入一个using namespace std
,并将 0.5 更改为 1.0,然后更改uniform_real
to uniform_real_distribution
,但之后,使用 libc++,我得到:
#include <random>
#include <iostream>
using namespace std;
int main(void) {
// Solver solve;
mt19937 mteng;
mteng.seed(0);
uniform_real_distribution<double> uniRealD;
double randomNum;
for (int index = 0; index < 10; index++){
randomNum = uniRealD(mteng);
if(randomNum<1.0)
cout<<index<<" no. random number is: "<<randomNum<<endl;
else
cout<<"number generate is not in range"<<endl;
}
return 0;
}
0 no. random number is: 0.592845
1 no. random number is: 0.844266
2 no. random number is: 0.857946
3 no. random number is: 0.847252
4 no. random number is: 0.623564
5 no. random number is: 0.384382
6 no. random number is: 0.297535
7 no. random number is: 0.056713
8 no. random number is: 0.272656
9 no. random number is: 0.477665
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)