使用tr1在C ++中超出范围的随机数生成 [英] out of range random number generation in C++ using tr1
本文介绍了使用tr1在C ++中超出范围的随机数生成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图从[0,1]范围内的实数的均匀分布中产生数字。但编译器生成的[0,1]范围之外的数字。
I am trying to generate number from a uniform distribution of real number in the range of [0, 1). But compiler is generating numbers which are out of [0, 1) range.
以下是代码:
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()
作为种子。
Any comments on what could be wrong with the code? I am using rdtsc()
as seed.
推荐答案
删除你的种子函数, rdtsc()
,使一些包含,引入使用命名空间std
0.5到1.0,并改变 uniform_real
到 uniform_real_distribution
,但是之后使用libc ++,我得到:
I had to get rid of your seed function, rdtsc()
, make some includes, introduce a using namespace std
, and change a 0.5 to 1.0, and change uniform_real
to uniform_real_distribution
, but after that, using libc++, I get:
#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
这篇关于使用tr1在C ++中超出范围的随机数生成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文