社区
C语言
帖子详情
电脑是如何获取 那个随机数 、随机种子
chenmm17
2010-01-07 10:13:34
电脑是如何获取 那个随机数 、随机种子,帮忙解释一下每一种语言的原理,有底层算法给出就最好
...全文
249
6
打赏
收藏
电脑是如何获取 那个随机数 、随机种子
电脑是如何获取 那个随机数 、随机种子,帮忙解释一下每一种语言的原理,有底层算法给出就最好
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
laiguo
2010-01-09
打赏
举报
回复
3楼的不错,学习了
jernymy
2010-01-08
打赏
举报
回复
顶
nihuajie05
2010-01-08
打赏
举报
回复
随机数生成,好像都是伪随机吧
都是时间相关的
z569362161
2010-01-08
打赏
举报
回复
一、C++中不能使用random()函数 ,random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。可改用C++下的rand函数来实现。
1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。RAND_MAX必须至少为32767。rand()函数不接受参数,默认seed为1,程序调用一次后将改变。随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)
2、C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。
3、 比较理想的是用变化的数,比如时间来作为随机数生成器的种子。 time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。
// C++随机函数(VC program)
#include <stdio.h>
#include <iostream>
#include <time.h>
using namespace std;
#define MAX 100
int main(int argc, char* argv[])
{ srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子.应该放在for等循环语句前面 不然要很长时间等待
for (int i=0;i<10;i++)
cout<<rand()%MAX<<endl;//MAX为最大值,其随机域为0~MAX-1
return 0;
}
二、rand()的用法
rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。 这样,如果你要产生0~10的10个整数,可以表达为:
int N = rand() % 11;
这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样:
int N = 1 + rand() % 11;
总结来说,可以表示为:
a + rand() % n
其中的a是起始值,n是整数的范围。a + rand() % (b-a+1) 就表示a~b之间的一个随机数。
若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依此类推。
另一种小数的产生方法。 用rand() / double(RAND_MAX)可以取得0~1之间的浮点数(注意,不同于整型时候的公式,是除以,不是求模),举例:
double ran_numf=0.0;
srand((unsigned)time(0));
for(int i=0;i<10;i++){
ran_numf = rand() / (double)(RAND_MAX);
cout<<ran_numf<<" ";
}
运行结果为:0.716636,0.457725,…等10个0~1之间的浮点数,每次结果都不同。
如果想取更大范围的随机浮点数,比如1~10,可以将
rand() /(double)(RAND_MAX) 改为 rand() /(double)(RAND_MAX/10)
运行结果为:7.19362,6.45775,…等10个1~10之间的浮点数,每次结果都不同。
至于100,1000的情况,如此类推。
通常rand()产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand( seed )函数进行随机化,随着seed的不同,就能够产生不同的随机数。
如大家所说,还可以包含time.h头文件,然后使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列
猫已经找不回了
2010-01-07
打赏
举报
回复
http://hi.baidu.com/defender/blog/item/65e7ec1f6410836bf624e4a0.html
可以参考下
swl82560397pq
2010-01-07
打赏
举报
回复
rand()
srand()
C#
随机数
的使用
C#
随机数
的使用
CubeSix_
随机数
_
随机生成3到18之间的
随机数
,并统计
随机数
规律,进行分析预测。
随机数
C#练习 投色子
随机数
C#练习 投色子
初 学 C#
random.zip
随机数
生成器
电脑
版
支持0-9999999999
随机数
,动态生成,重复/非重复数字
随机抽奖软件
一个实用的随机抽奖软件程序,可以设置抽奖号码的范围,支持自动抽奖,每次抽奖自动保存抽奖记录,简单使用。
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章