社区
C语言
帖子详情
电脑是如何获取 那个随机数 、随机种子
chenmm17
2010-01-07 10:13:34
电脑是如何获取 那个随机数 、随机种子,帮忙解释一下每一种语言的原理,有底层算法给出就最好
...全文
277
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()
C语言实现猜数字游戏
猜数字游戏+关机 -> 猜数字游戏进阶版
简单的C语言程序---猜数字游戏
由此,我们可以看出rand并不是完全随机的,他生成的都是伪
随机数
,通过某种算法来实现的,基于一个种子的基准值来随机生成,所以我们只要让种子随机就可以让rand彻底随机了。time函数的参数 timer 如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存。time 函数会返回当前的日历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运行时间之间的。如果 timer 是NULL,就只返回这个时间的差值。机数的时候的种子,只要种子在变化,每次⽣成的
随机数
序列也就变化起来了。
C语言----猜数字小游戏实现
#define _CRT_SECURE_NO_WARNINGS 1//vs小缺点,不是vs可以删了这行 //猜数字游戏 //1.
电脑
随机生成数 //2.玩家猜数字 //告知猜测情况 //3.游戏可以一直玩 #include<time.h> #include<stdio.h> #include<stdlib.h> void play()//游戏本体 { int t,k; k = rand()%100+1;//这里以1到100的猜数字为例子 printf("请输入第一.
<C>.猜数字游戏
猜数字游戏实现。
7.3.
随机种子
导入第三方库以及相关设置 import numpy as np from numpy import random import matplotlib.pyplot as plt %matplotlib inline # 解决中文乱码 plt.rcParams["font.sans-serif"]=["KaiTi"] plt.rcParams["font.family"]="sans-serif" # 解决符号无法显示的问题 plt.rcParams['axes.unicode_minus'] = Fa
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章