C中的快速随机数生成函数

时间:2013-07-03 17:11:10

标签: c random

我正在尝试制作一个随机数生成器,可以非常快速地生成许多新的随机数。我尝试过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很新,所以任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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());
}