Search code examples
c++randomc++11tr1uniform

out of range random number generation in C++ using tr1


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.

Here is the code:

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;
}

Any comments on what could be wrong with the code? I am using rdtsc() as seed.


Solution

  • 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