社区
C语言
帖子详情
电脑是如何获取 那个随机数 、随机种子
chenmm17
2010-01-07 10:13:34
电脑是如何获取 那个随机数 、随机种子,帮忙解释一下每一种语言的原理,有底层算法给出就最好
...全文
238
6
打赏
收藏
电脑是如何获取 那个随机数 、随机种子
电脑是如何获取 那个随机数 、随机种子,帮忙解释一下每一种语言的原理,有底层算法给出就最好
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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()
商业级帧同步卡牌放置手游案例
其中涉及到的技术包括:帧同步、定点数、
随机种子
、
随机数
、技能系统、Buff系统、逻辑渲染分离、服务端客户端公用战斗逻辑编写、WebSocket、Editor技能编译器、Excel转Json工具、等等技术。 该课完美解决了卡牌放置...
随机种子
和
随机数
原理
但是再复杂的算法都要一个初始值,如果没有一个初始值,他也不能凭空制造一系列的
随机数
出来,那我们说的
随机种子
seed()就是这个初始值。 让我们看看random
随机数
是怎么生成的:我们将这套复杂的生成
随机数
算法...
随机数
种子(seed)
在科学技术和机器学习等其他算法相关任务中,我们经常需要用到
随机数
,为了把握
随机数
的生成特性,从
随机数
的随机无序中获得确定和秩序。我们可以利用
随机数
种子(random seed)来实现这 一目标,
随机数
种子,可以...
伪
随机数
,
随机数
种子
3.
随机数
是由
随机种子
根据一定的计算方法计算出来的数值。所以,只要计算方法一定,
随机种子
一定,那么产生的
随机数
就不会变。也就是说,伪
随机数
也是某种对应映射的产物,只不过这个自变量是系统的时间而...
Python
随机种子
介绍,PyTorch 中
随机种子
的设置应用
随机种子
是什么?
随机种子
是针对随机方法而言的。 随机方法:常见的随机方法有生成
随机数
,以及其他的像随机排序之类的,后者本质上也是基于生成
随机数
来实现的。在深度学习中,比较常用的随机方法的应用有...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章