博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
伪随机数生成方法
阅读量:5054 次
发布时间:2019-06-12

本文共 1549 字,大约阅读时间需要 5 分钟。

大家好.今天说点儿关于程序设计过程中产生随机数的方法.

       (一)JAVA伪随机数生成方法

       随机数在程序设计过程中,特别是在实践环境模拟和测试等领域中得到很广泛的应用,我们在编程的过程中也时不时需要使用到随机数.计算机中的随机数,并不是真正的随机数,而是叫做"伪随机数",是计算机通过某种特别算法模拟产生的.

      在JAVA语言中,我们可以通过Math类的random方法产生区间[0,1)的随机数,若要产生[a,a+b)之间的伪随机数,可以通过语句 a + b * Math.random(); 来实现.该方法的方法签名为:static double random();

      Math类位于java.lang包中,而java.lang包是默认包含的,因此不需要显式使用 import java.lang.*; 语句.在API文档中我们可以知道该类的继承结构:

    可以知道,Math类是Obeject类的直接子类,而object类是所有其他类的直接或间接超类.Math类中声明了许多与数学计算相关的实用成员变量和方法成员,如:

    static double E;   //自然对数的底数

    static double PI;  //顾名思义,圆周率π

    在程序中可以使用它们,来代替实用const double来定义变量.

    static double abs(double);  //求绝对值方法

    static double cos(double);  //余弦函数,与此类似,还有正弦sin方法,正切tan方法等

    static double pow(double, double);  //幂函数

    static double sqrt(double); //开算术平方根

    ......

    

      (二)C/C++中伪随机数生成方法

      在C/C++中没有像JAVA中Math.random()这样的方法(函数).使用的是头文件stdlib.h或cstdlib中的rand()函数.函数原型为:int rand(); ,产生一个0 ~ RAND_MAX之间的伪随机整数.RAND_MAX定义在stdlib.h中,我机器上的MinGW编译器的定义为:             #define RAND_MAX 0x7FFF

      若要产生(0,a)之间的随机数,rand() % (a+1)即可;((double)rand()/RAND_MAX)*(b-a) + a, 产生区间[a,b]上的随机数.

      但是,这样生成的伪随机数是一个固定的序列,当再一次使用rand()函数产生随机数时,会产生和之前相同的值.改进方法是重新设置随机数种子(默认为1).使用函数void srand (unsigned int)来设置随机数种子,改变伪随机数序列.

      为了是随机数更加具有随机性,通常使用头文件time.h中的time函数的返回值作为随机数种子,如srand((unsigned)time(0));

      示例代码如下:

1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 int main(){ 8 9 srand((unsigned)time(0));10 11 for(int i = 0; i < 10 ;i++)12 cout<<10+rand()%21<<' '; //10~30之间的随机数13 14 return 0;15 }

 

转载于:https://www.cnblogs.com/hxb316/p/5998958.html

你可能感兴趣的文章
[笔记]C#基础入门(十八)——C#中多重if结构
查看>>
Failed to write genesis block: database already contains an incompatible
查看>>
node——模块分类,require执行顺序,require注意事项,原理
查看>>
回发或回调参数无效的各种情况分析及解决办法
查看>>
第14周总结
查看>>
tomcat访问
查看>>
取消元件库里的元件等比例缩放
查看>>
unity中使用代理(翻译)
查看>>
openWRT自学---初始化过程和主要脚本的分析--转
查看>>
planning algorithms chapter 3
查看>>
HDU 1166 敌兵布阵 树状数组
查看>>
基于第三方开源库的OPC服务器开发指南(1)——OPC与DCOM
查看>>
PHP重要知识点
查看>>
伪静态例子与APACHE伪静态配置
查看>>
把ISO文件加载到虚拟光驱
查看>>
[区块链] 密码学——椭圆曲线密码算法(ECC)
查看>>
第6周学习进度
查看>>
数据库运行在非归档模式下,数据文件被误删的解决方法
查看>>
再要你命3K的任务总结
查看>>
小白学数据分析------>描述性统计术语汇总
查看>>