0

UNIX/LINUX srand48 および drand48 関数を C で記述する必要があります。シード値の設定と使用に行き詰まっています。私には2つの機能があります:

#include <math.h>

long int mfml_win_drandX0;  //actual value used for generation

void srand48(long int seedval) 
{
    mfml_win_drandX0=seedval;  //setting seed into mfml_win_drandX0
}

double drand48(void)
{
    static const double a=0x273673163155, 
                        c=0x13,
                m=281474976710656;
/*EDIT: error was here*/
    mfml_win_drandX0=fmod(a*mfml_win_drandX0+c,m);;  //computing the next value
    return mfml_win_drandX0/m; 
}

しかし、使用する場合:

srand48(2) ;

for (int i=0;i<10;i++)
    std::cout<<drand48()<<std::endl;

(mfml_win_drandX0) は変わらず、毎回同じ番号を取得します。この問題を解決するには?

4

2 に答える 2

0

しかし、あなたは何を得ることを期待していますか?コードにはランダムなものはありません。a、c、m はすべて定数です。mfml_win_drandX0 を変更しても異なる結果は得られません。

于 2013-07-23T09:11:00.880 に答える