首页 > 编程知识 正文

c语言随机数代码,随机数生成c语言

时间:2023-05-06 12:53:50 阅读:119899 作者:2608

在编程中,有时会使用随机数。 本文介绍如何在Linux编程环境中生成伪随机数。

伪随机数是什么?伪随机数实际上不是随机的,因为通过确定性算法计算的“似是”是随机数列。 计算伪随机数时,只要初始值不变,伪随机数的顺序也不变。

伪随机数的优点要生成真随机数,必须使用专用设备,如热噪声信号、量子力学效应、放射性元素衰减辐射或不可预测现象的使用。 由于伪随机数的计算比较简单,不需要外部特殊硬件的支持,计算机科学中仍然使用伪随机数。

伪随机数的缺点在某些方面不可用,因为伪随机数不是真随机数。 请注意,例如,在密码学中使用伪随机数时,可计算性是可攻击的位置。 在统计学、asjddy法中所使用的伪随机数也必须选择周期极长、随机性足够高的随机性函数,以便计算结果有充分的随机性。

rand ) )函数生成伪随机数函数原型:

必须包含//头文件stdlib.hintrand(void )的Linux rand ()函数返回介于0和RAND_MAX之间的随机值。 此处RAND_MAX的定义为stdlib.h (如下图的128行所示,值为2147483647(2^31-1 ) )。

下面的示例使用rand ) )函数生成伪随机数:

# include stdlib.h # include stdio.h # define rand _ num 5int main (int argc,char*argv[](for(intI=0); i RAND_NUM; I ) printf('%d”,rand ); printf((n ); 返回0; }编译后连续运行两次,结果如下。

$./rand 18042893838469308861681692771714636915195747793 $./rand 1804289388616816927717146369157477793为什么

计算机生成的伪随机数可以用递归的方法获得,需要初始值,也就是通常所说的种子。 如果不初始化种子,计算机将使用默认值。 由于两次执行初始值相同,递归公式也相同,因此有完全相同的伪随机序列。

rand ) )函数时,如果未设置随机数种子,则rand ) )在调用时自动将随机数种子设置为1。

为了避免这种结果,每次运行程序时都必须初始化种子,初始值必须不同(例如到目前为止的经过时间)。

获取当前时间(以秒为单位)函数的原型:

//必须包含头文件time.htime_ttime(time ) t*timer; time_t其实是一个很长的整形。

time_ttime(time_t*timer )函数的用法如下:

如果参数为NULL,则返回1970年1月1日0时0分0秒到该时间的秒数; 如果参数不为NULL,则返回的值不仅存储在1970年1月1日0时0分0秒到该时间的秒数中,还存储在参数指定的time_t类型的变量中。

设置种子函数原型:

//必须包含头文件stdlib.hvoidsrand (未指定); srand函数以种子值为参数。 与函数time_ttime(time_t*timer )组合使用时,可以按如下方式设置种子:

srand ((未指定的int ) time ) null ); 代码# include stdlib.h # include stdio.h # include time.h # define rand _ num 5int main (int argc,char *argv[] () srand i RAND_NUM; I ) printf('%d ',rand ) )0); printf((n ); 返回0; }实验结果如下。

$./rand 6171643513 $./rand 5011834369 $./rand 6832359483【完】

参考资料http://txgcwm.github.io/blog/2013/07/07/Linux下雅- cyu-Yan-Wei-sui-Ji-Shu-bian-cheng /

https://zh .维基百科. org /维基/伪随机

3359 blog.csdn.net/duyi wuer 2009/article/details/49497199

33558 www.cplusplus.com/reference/c stdlib/srand/kw=srand

http://blog.jobbole.com/108049/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。