1

多くの新しい乱数を非常に迅速に生成する乱数ジェネレーターを作成しようとしています。srand(time(NULL)) を試しましたが、多くの数をすばやく生成しようとしているため、これは機能しません。次に私はこれを試しました:

int main()
{
    seed_plus=time(NULL);    
    int i;
    for (i=0; i<10;i++)
    {
        double R=ran(seed_plus);
        printf("%lf\n",R);
        seed_plus=seed_plus+1;
    }
}
double ran (int seed_plus)
{

    srand(seed_plus);
    double random_number = (double)random()/(double)RAND_MAX;
    return(random_number);
}

これは機能しますが、「ran」関数内に「seed_plus=seed_plus+1」を含めたいと思います。そのステートメントを関数内に移動すると、同じ「乱数」の多くが得られます。これにより、関数によって返される値ではないため、seed_plus がメモリに保存されていないと思いますか?

私はCにかなり慣れていないので、助けていただければ幸いです!

4

2 に答える 2

2

乱数が必要になるたびに乱数ジェネレーターをシードする理由はありません。コードを単純化するだけです:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

double ran(void)
{
    return (double)rand() / RAND_MAX;
}

int main(void)
{
    srand(time(NULL));
    for (int i = 0; i < 10; i++)
        printf("%f\n", ran());
}
于 2013-07-03T17:15:42.093 に答える