浅析C++语言中随机数应用.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浅析C语言中随机数应用

浅析C++语言中随机数应用   摘要:该文针对C++语言中的随机数生成以及使用方法进行分析和探讨,主要对各种随机数的生成算法进行设计。在C++中,随机数的生成主要通过函数文件中的ramt()和srand()函数。首先,阐述rarut()和srand()两种函数共同的使用方法和模式,并分析了各自的缺点,然后以现实中的问题和实际的题目为例,通过实际编程来阐释随机数生成函数的使用方法,实现了不同概率的随机数的产生、不连续的随机数的产生等方法 关键词:随机数;伪随机数;种子;随机数生成器 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)08-0098-03 1概述 经过对C++语言的学习,笔者发现书中对于随机函数的使用只是一概而过,没有进行深入的阐释和联想。文献是到“其实计算机不会产生绝对随机的随机数,只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,计算机只能生成相对的随机数,即伪随机数。实际上,系统是将0~32767之间的整数“随意”地排成了一个“随机数表”,程序第一次调用rand()函数是取“随机数表”中的第一个,第二次调用rand()函数是取“随机数表”的第二个,由此类推。即使我们运行了多次,但都是在同一个系统上,而同一个系统产生的“随机数表”又始终是相同的,因此每一次运行的结果都是一样的。”现有文献大都集中在介绍随机函数的用法,本文从实际应用出发,分析和研究各种不同类型随机数的生成算法,并进行实验分析 2随机数的生成的原理(C++框架下) 2.1C++中随机数的定义 C++语言中使用cstdlib中的函数rand()进行生成,但生成的只是伪随机数。因为rand()的内部实现是用线性同余法做成的,生成随机数时,需要指定一个种子,用srand()来设置rand()产生随机数时的随机数种子,如果每次srand()都设相同值,rand()所产生的随机数值每次就会一样。通常可以利用time(0)的返回值或NULL来当做seed,这样可以输出不同的随机数 2.2随机数随机重现试验 线性同余法产生对随机数是伪随机数,下面进行试验,测试具体伪随机数的特点 通过图1的实验结果,可以发现当给予相同的随机数函数种子时,他会输出相同的数字,这就是“伪随机数”名字的来历。为了设计出不同的随机函数,C++引入函数time(0)(电脑上确切的时间),用time(0)作为种子,可以实现随机数函数每次的种子都不同,从而产生出不同的随机数,让数字的产生更加接近随机 2.3验证伪随机数是否足够随机的实验 通过图2,由此看出0-9的各个数字,当随机数数量足够多时,产生概率是近似相同的,因此Fang()函数产生的伪随机数是可以近似看作随机数的 3随机数常见的使用方法 3.1随机数小数(不考虑进位)的产生 随机数产生器rand()是根据其后%n中的n来确定产生的数字的,会产生出所有小于n的整形数字(包括0),由于c++语言中%(取余函数)只能输出整数,所以随机小数是不能直接产生的,必须运用其他方式 从图3可以看出,虽然rand()函数只能输出整数,但通过除法运算,可以输出小数,再加上整数就可以输出具有大于1的随机小数,通过实验结果可以证明算法的正确性 3.2随机数小数(考虑进位)的产生 通过对rand()函数产生数据的数字类型变换从而为浮点数创造了可能,/10可以制造出一位小数,/100可以制造出两位小数,如果想随机输出3-5之间的小数只需要将%n中的n改为大于10的数字,通过小数点进位的方式来进行。例如: 图4这为小数随机数(跨位数)的生成算法 分析:关于进位,可以看做是大于1的小数和整数的相加,通过rand()随机输出0-20的随机数,除以10后,便成为随机输出0.0-2.0之间的随机小数,加上3后成为随机输出3.0-5.0之间的随机数,根据实验结果,这种算法正确 3.3任意数的随机输出 C++中rand()只能通过取余函数来进行模拟,如果要随机出特定的随机数,譬如1、4、5、9这四个随机数,我们可以通过if来进行筛选 分析:随机数只能连续输出,如果要输出特定的数字只能依靠if判断语句,进行随机数的筛选,如果是特定的数字就输出,不是就继续随机输出下一个数字。通过图实验结果证明这种算法正确 3.4不同比例随机数输出 在实际生活中随机数的输出概率并不均等,那么依靠c++语言中,运用rand()函数仍可以进行输出,例如0、1、2、3、4、5、6这些数字,而0、1、2、3这三个数字比其他数字更容易输出50% 分析:第一??for循环按等比例输出随机数,第二个for循环通过再次随机输出特定相同数字相同

文档评论(0)

linsspace + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档