使用tr1在C ++中生成超出范围的随机数

时间:2012-04-13 00:40:46

标签: c++ random c++11 tr1 uniform

我试图从[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()作为种子。

3 个答案:

答案 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.)