三九宝宝网宝宝百科宝宝知识

C怎么产生随机数

02月10日 编辑 39baobao.com

[数字信号光纤传输中误码产生的原因]误码的产生是由于在信号传输中,衰变改变了信号的电压,致使信号在传输中遭到破坏,产生误码。噪音、交流电或闪电造成的脉冲、传输设备故障及其他因素都会导致误码(比如传送的信号...+阅读

本文由青松原创并依GPL-V2及其后续版本发放,转载请注明出处且应包含本行声明。C++中常用rand()函数生成随机数,但严格意义上来讲生成的只是伪随机数(pseudo-random integral number)。生成随机数时需要我们指定一个种子,如果在程序内循环,那么下一次生成随机数时调用上一次的结果作为种子。但如果分两次执行程序,那么由于种子相同,生成的“随机数”也是相同的。

在工程应用时,我们一般将系统当前时间(Unix时间)作为种子,这样生成的随机数更接近于实际意义上的随机数。给一下例程如下:#include #include #include using namespace std; int main() { double random(double,double); srand(unsigned(time(0))); for(int icnt = 0; icnt != 10; ++icnt) cout return 0; } double random(double start, double end) { return start+(end-start)*rand()/(RAND_MAX + 1.0); }/* 运行结果* No.1: 3* No.2: 9* No.3: 0* No.4: 9* No.5: 5* No.6: 6* No.7: 9* No.8: 2* No.9: 9* No.10: 6*/ 利用这种方法能不能得到完全意义上的随机数呢?似乎9有点多哦?却没有1,4,7?!我们来做一个概率实验,生成1000万个随机数,看0-9这10个数出现的频率是不是大致相同的。

程序如下:#include #include #include #include using namespace std; int main() { double random(double,double); int a[10] = ; const int Gen_max = 10000000; srand(unsigned(time(0))); for(int icnt = 0; icnt != Gen_max; ++icnt) switch(int(random(0,10))) { case 0: a[0]++; break; case 1: a[1]++; break; case 2: a[2]++; break; case 3: a[3]++; break; case 4: a[4]++; break; case 5: a[5]++; break; case 6: a[6]++; break; case 7: a[7]++; break; case 8: a[8]++; break; case 9: a[9]++; break; default: cerr } for(int icnt = 0; icnt != 10; ++icnt) cout return 0; } double random(double start, double end) { return start+(end-start)*rand()/(RAND_MAX + 1.0); }/* 运行结果* 0: 10.01%* 1: 9.99%* 2: 9.99%* 3: 9.99%* 4: 9.98%* 5: 10.01%* 6: 10.02%* 7: 10.01%* 8: 10.01%* 9: 9.99%*/ 可知用这种方法得到的随机数是满足统计规律的。

另:在Linux下利用GCC编译程序,即使我执行了1000000次运算,是否将random函数定义了inline函数似乎对程序没有任何影响,有理由相信,GCC已经为我们做了优化。但是冥冥之中我又记得要做inline优化得加O3才行...不行,于是我们把循环次数改为10亿次,用time命令查看执行时间:chinsunggentoo ~/workspace/test/Debug $ time ./test 0: 10.00%1: 10.00%2: 10.00%3: 10.00%4: 10.00%5: 10.00%6: 10.00%7: 10.00%8: 10.00%9: 10.00% real 2m7.768s user 2m4.405s sys 0m0.038s chinsunggentoo ~/workspace/test/Debug $ time ./test 0: 10.00%1: 10.00%2: 10.00%3: 10.00%4: 10.00%5: 10.00%6: 10.00%7: 10.00%8: 10.00%9: 10.00% real 2m7.269s user 2m4.077s sys 0m0.025s 前一次为进行inline优化的情形,后一次为没有作inline优化的情形,两次结果相差不大,甚至各项指标后者还要好一些,不知是何缘由...

以下为关联文档:

请问氟化物对人会不会对人产生影响?有哪些危害、主要有害因素分析 1. 粉尘危害 铝厂在生产过程中产生的粉尘主要有氧化铝粉尘、石油焦粉尘、沥青烟尘。氧化铝粉尘主要存在电解厂房内、氧化铝贮运系统;煅烧工段的上料系统...

简述会计的本质如何理解会计的职能会计信息产生的程序过程1.会计是经济管理的重要组成部分,以货币为主要计量单位,运用专门的方法对发生的经济业务进行确认、计量和报告的一种经济管理活动,会计的本质就是一种经济管理活动。 2.会计的...

我知道植物奶油会产生反式脂肪酸谁说下三四线城市哪家蛋糕店用连锁蛋糕店基本一家没有,普通蛋糕店更不用说,只有定制可能会有。植物性奶油有利于商家而不利于消费者的优点简直太多了-----贮存:动物性奶油因为属于天然产品,需要2-8度的低温保...

vb计时器每秒产生一个数并把这些数累加出来展开全部 ========================================================================= 在窗体增加一个timer控件和Text文本框控件,timer的interval属性设成1000,也就是一秒...

vb6中当程序运行后随机产生一个数并且判断奇数偶数'添加窗体Form1,文本框Text1,按钮Command1,Command2,然后添加如下代码: Private Sub Form_Load() Command1.Caption = "产生随机数" Command2.Caption = "判断" Text1.Locked = Fals...

多少牛粪可以产生1立方的沼气?沼气发电的技术难题这种提问只是一个理想的数据。没有什么实质性作用。 你得先计算出每天有多少牛粪产生、采用什么发酵工艺、多高的温度来计算。 一头成年牛每天产生的干粪为34公斤,日排尿也为...

产生沙尘暴的原因说起沙尘暴形成的原因很复杂,是多方面的。沙尘暴的动力是风。物质基础是沙尘。风与沙尘各有复杂多样的时空变化。有足够强大的风,还要有足够量的沙尘。但是把大量沙尘吹起来,也...

沙尘暴产生的原因沙尘暴产生的原因: ①乱垦、滥牧、过度樵采,使植被遭破坏,土壤裸露,土地沙化迅速扩展。 ②冬春季节少雨,气候干燥,土质疏松。 ③快行冷风过境。 什么是沙尘暴 沙尘暴是一种风与沙...

墙面裂缝产生的原因有哪些1、墙面裂缝出现在结构层:地震、地基沉降不均匀、温度变化过大等导致墙内裂缝。 2、墙面裂缝出现在接缝处:新墙与旧墙的结合处、砖墙与天花板的拼接处、墙面开槽施工处,如果材...

推荐阅读
图文推荐