2

[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()シードとして使用しています。

4

3 に答える 3

2

あなたのコードはそうすべきではありません。おそらく実装のバグです。コンパイラとライブラリのバージョンは? tr1 から C++11 に移行してみてください。

于 2012-04-13T01:09:07.850 に答える
2

シード関数 を削除しrdtsc()、いくつかのインクルードを作成し、 を導入しusing namespace std、 を 0.5 から 1.0 に変更uniform_realuniform_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
于 2012-04-13T01:22:11.910 に答える
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.)

于 2012-04-13T00:44:29.427 に答える