使用tr1在C ++中超出范围的随机数生成 [英] out of range random number generation in C++ using tr1

查看:342
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆