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

4

您只需拨打srand一次,之后,所有下一次呼叫random每次都会返回不同的号码。

于 2013-07-03T17:14:27.230 回答
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 回答