为什么rand()每次产生的随机数都一样
之所以rand()每次的随机数都一样是因为rand()函数使用不正确。各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种完全相同的序列对于你来说是非常糟糕的。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。你可以在调用rand()函数之前调用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。你也可以使用srand函数来人为指定种子数。Windows 9x/NT的游戏FreeCell就允许用户指定种子数,这样用户如果一次游戏没有成功,下次还可以以同样的发牌结果再玩一次。
陈翔宇: 我按照上述方法并不能产生随机数,仅产生公差为3或4的等差数列:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>
void main()
{
for(int i=0;i<100000;i++)
{
srand( (unsigned)time( NULL ) );
cout<<rand()<<endl;
}
}
答:你的程序是有问题的,你每产生一个随机数之前,都调用一次srand,而由于计算机运行很快,所以你每次用time得到的时间都是一样的(time的时间精度较低,只有55ms)。这样相当于使用同一个种子产生随机序列,所以产生的随机数总是相同的。你应该把srand放在循环外:
srand( (unsigned)time( NULL ) );
for(int i=0;i<100000;i++)
{
cout<<rand()<<endl;
}
为什么rand()每次产生的随机数都一样相关推荐
- C语言随机函数为什么rand()每次产生的随机数都一样
之所以rand()每次的随机数都一样是因为rand()函数使用不正确.各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布.如果计 ...
- matlab rand randn 每次生成的随机数都一样的解决方案
文章目录 问题说明 解决方案 例子 生成不重复的随机数 生成重复的随机数 结论 参考文献 问题说明 在Matlab应用中,我们经常需要用到随机数,比如rand(),randn()等函数,都是生成某一类 ...
- torch.manual_seed的意义为了每次得到的随机数是固定的,为了复现实验的目的
import torch torch.manual_seed(1) print(torch.rand(2)) 运行这段代码会发现,每次得到的随机数是固定的.但是如果不加上torch.manual_se ...
- 用深度学习每次得到的结果都不一样,怎么办?
http://www.sohu.com/a/150686946_116235 作者:崔静闯 神经网络算法利用了随机性,比如初始化随机权重,因此用同样的数据训练同一个网络会得到不同的结果. 初学者可能会 ...
- php随机整数rand和mt_rand,PHP随机数函数rand()与mt_rand()的讲解
PHP随机数函数rand()与mt_rand()的讲解 PHP中rand()与mt_rand()都是用于产生一个指定范围内单独随机数的函数,如果需要产生多个不重复的随机数,请参考:PHP生成指定范围内 ...
- 解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题
解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题 每次提交代码到仓库都要输入用户名和密码,王同学差点哭了 忍住 忍住 不能哭 不能哭 解决方法如下: Right click ...
- c语言rand生成1 100随机数,c语言生成1~100随机数
C语言如何srand和rand函数产生10个1-100内的随机数 10个是任意的,也可能是100个,1-100也是任意的...CSS布局HTML小编今天和大家分享解,详细的有追加 需要准备的材料分别有 ...
- wps表格宏被禁用如何解禁_(wps表格怎么设置宏)为什么每次打开excel文件都要提示启用或者禁用宏?...
打开Excel时出现"该工程中的宏被禁止",怎么启用宏? 启用宏的方法(2003 版): 工具 → 宏 → 安全性 → 安全级 → 中 关闭Excel → 重新打开 → 启用宏 - ...
- 寒假的时候,小明同学要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上。小明可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点,然后才能去访问下一个朋友。
寒假的时候,小明同学要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上.小明可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点,然后才能去访问下一个朋友. 比如有4个朋友,对应 ...
最新文章
- android studio 去掉标题栏的简单方法
- Android 中文 API 文档 (45) —— AbsoluteLayout.LayoutParams
- 海思 core 电压动态调整
- 系列(五)—MySql
- oracle中12523,【Oracle】静态监听导致的ORA-12523错误
- 嵌入式通过绑定实现双网卡冗余
- 如何退出python程序_python怎么退出程序
- HNU 19.迭代电路习题
- Laravel系列教程一:安装及环境配置
- Visual Studio 2019密钥
- Luogu2627 修剪草坪
- 方便快速地创建新浪微博表情选择对话框——jQuery Sina Emotion
- 【操作系统实验】设备驱动(Linux环境下)
- 从文件结构认识HLS
- 携手独角兽企业,微软正在用AI打造更美好的未来
- JavaScript JS 如何定义多行文本
- python pandas 怎么判断一天是否为工作日+计算距离特定时间之间的天数
- 静态库,动态库是啥,有啥区别(静态函数库/动态函数库)
- android 绘画笔迹回放_一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置与流程...
- tomcat配置静态资源访问