m0_74128289 2023-01-28 23:54 采纳率: 87.5%
浏览 31
已结题

随机数生成相同怎么办

为什么生成的随机数都是一样的 应该怎样进行更改?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
double random(double down,double top)
{
    double num;
    srand((unsigned int)time(NULL));
    num=(double)rand()/RAND_MAX;
    num=down+num*(top-down);
    return num;
}
void dingjifen()
{
    double a,b,d,n,x,y,i,m;
    printf("请输入n:\n");
    scanf("%lf",&n);
    printf("请输入大于0的a,b:\n");
    scanf("%lf%lf",&a,&b);
    d=1+b*b;
    for(i=1,m=0;i<=n;i++)
    {
        x=random(a,b);printf("%lf ",x);
        y=random(0,d);
        if(y<=(1+x*x))
        {
            m++;
        }
    }
    printf("f(x)的定积分=%lf",(m*(b-a)*d/n));
}
int main()
{
    dingjifen();
}


  • 写回答

6条回答 默认 最新

  • a5156520 2023-01-29 12:36
    关注

    因为以time(NULL),即从1970年1.1日(元旦)午夜0点到现在的秒数作为srand()函数的参数,在程序的运行过程中,因为计算速度很快,time(NULL)返回的时间很有可能是一个相同的值,即使用srand()函数使用一个相同的数值来设置随机数种子,所以后续产生的随机数都是以此种子来产生的相同序列下的随机数,所以就表现为产生了相同的随机数。

    根据网络搜索的srand()函数的模拟实现,发现它使用了一个全局静态变量作为随机数种子,所以可以把srand()函数放在dingjifen()函数中产生一次随机数种子即可。

    修改如下:

    参考链接:


    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    double random(double down,double top)
    {
        double num;
       // unsigned int t =  (unsigned int)time(NULL);
       // printf("\nt=%u\n",t);
        
     
      // srand(t);
       
        num=(double)rand()/RAND_MAX;
        num=down+num*(top-down);
        return num;
    }
    void dingjifen()
    {
        double a,b,d,n,x,y,i,m;
        printf("请输入n:\n");
        scanf("%lf",&n);
        printf("请输入大于0的a,b:\n");
        scanf("%lf%lf",&a,&b);
        d=1+b*b;
        srand((unsigned int)time(NULL)); // 在定积分中调用srand()产生一次随机数种子即可 
        for(i=1,m=0;i<=n;i++)
        {
            x=random(a,b);
            printf("%lf ",x);
            y=random(0,d);
            if(y<=(1+x*x))
            {
                m++;
            }
        }
        printf("f(x)的定积分=%lf",(m*(b-a)*d/n));
    }
    int main()
    {
        dingjifen();
    }
     
     
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月28日

悬赏问题

  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计