【问题标题】:Rapid random number generating function in CC中的快速随机数生成函数
【发布时间】:2013-07-03 17:11:09
【问题描述】:

我正在尝试制作一个随机数生成器,它可以非常快速地生成许多新的随机数。我已经尝试过 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 很陌生,因此我们将不胜感激!

【问题讨论】:

  • 你为什么每次都播种随机数生成器?
  • 旁注:对于 [M, N] 范围内的数字,您应该使用 M + rand() / (RAND_MAX / (N - M + 1) + 1),阅读:How can I get random integers in a certain range? 您的 M = 0N = RAND_MAX跨度>
  • 您好,您必须点击他们左侧的V 来接受答案。
  • @JorgeFuentesGonzález 给这个链接 :) you may like to accept one answer
  • @GrijeshChauhan 哇,哈哈,谢谢:P

标签: c random


【解决方案1】:

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

【讨论】:

    【解决方案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());
    }
    

    【讨论】:

    • @user2544213 - 那么你应该涉足政治。
    猜你喜欢
    • 2012-03-13
    • 2016-02-21
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多