• 产生0到1之间均匀分布的一个随机数与随机数序列


    1、功能:

    产生0到1之间均匀分布的一个随机数

    2、方法说明:

    设m=216,产生产生0到1之间均匀分布的一个随机数的计算公式如下:

    ri=mod(2053ri-1 +13849,m),i=1,2,3……

    pi =ri/m

    例:连续产生10个0到1之间均匀分布的一个随机数 。r的初值取5.0

     1   #include "stdio.h"
     2   double rnd1(double *r)
     3   { int m;
     4     double s,u,v,p;
     5     s=65536.0; u=2053.0; v=13849.0;
     6     m=(int)(*r/s); *r=*r-m*s;
     7     *r=u*(*r)+v; m=(int)(*r/s);
     8     *r=*r-m*s; p=*r/s;
     9     return(p);
    10   }
    11   main()
    12   { int i;
    13     double r;
    14     r=5.0;
    15     printf("\n");
    16     for (i=0; i<=9; i++)
    17        printf("%10.7lf\n",rnd1(&r));
    18     printf("\n");
    19     getch();
    20   }

    3、功能:
    产生0到1之间均匀分布的一个随机数序列

    例:产生50个0到1之间均匀分布的一个随机数序列,r的初值取1.0

     1 
     2  
     3   #include "stdio.h"
     4   void rnds(r,p,n)
     5   double *r,p[];
     6   int n;
     7   { int i,m;
     8     double s,u,v;
     9     s=65536.0; u=2053.0; v=13849.0;
    10     for (i=0; i<=n-1; i++)
    11       { *r=u*(*r)+v; m=(int)(*r/s);
    12         *r=*r-m*s; p[i]=*r/s;
    13       }
    14     return;
    15   }
    16   main()
    17   { int i,j;
    18     double p[50],r;
    19     r=1.0
    20     rnds(&r,p,50);
    21     printf("\n");
    22     for (i=0; i<=9; i++)
    23       { for (j=0; j<=4; j++)
    24           printf("%10.7lf  ",p[5*i+j]);
    25         printf("\n");
    26       }
    27     printf("\n");
    28     getch();
    29   }
    30 
    作者:cpoint
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    php极光网络一键登录(yii框架)
    Sublime Text3将多行转为为一行 | Sublime Text 快速分别独立选中多行
    mysql 将时间戳转换成日期格式
    Vant主题定制修改颜色样式
    TypeError: this.getOptions is not a function 引入less一直报错
    export defaul 和 export定义和区别
    Vue vant引入,tabbar封装使用示例
    php去除富文本编辑器中的内容格式
    ES6:高级数组函数,filter/map/reduce
    [BZOJ2793][Poi2012]Vouchers
  • 原文地址:https://www.cnblogs.com/cpoint/p/1908700.html
Copyright © 2020-2023  润新知