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 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊