什么是随机数?

 我来答
没文化的大脑袋CU
2022-11-15 · TA获得超过2663个赞
知道小有建树答主
回答量:556
采纳率:100%
帮助的人:75.8万
展开全部
问题一:什么是随机数? 随机数就是计算机随机产生的数字序列。伪随机数序列看上去是随机的,但是反复执行程序会发现每次程序所产生的序列是重复的。可以用srand来避免出现伪随机数,他unsigned类型的数据作参数并未函数rand设置随机数种子。
c代码:
#include
1.
i=rand();产生0到RAND_MAX(32767)之间的整数
2.
unsigned seed;
srand(seed);设置种子
i=rand();

问题二:真随机数的定义是什么 从软件的角度来说,如果是计算机起卦,则要用到随机数,而电脑中的随机数是假的随机数,搞那么多年程序,我还没看到过什么玩意能够有真随机数,按现代科学定义的真随机数的产生条件有起码两个:
1、真随机数数列是不可预计的,因而也不可能重复产生两个相同的真随机数数列。
2、真随机数只能用某些随机物理过程来产生。例如:放射性衰变、电子设备的热噪音、宇宙射线的触发时间等等。
在计算机中,为了满足信息熵的特性,常常是用到的信息源包括用户的人为反应或某种经过排列变形后的高频时钟的序列或者是用户运动鼠标的路径的坐标等,这在一般的程序里据我看是很少触及到的。因此,计算机上的起卦方法先不谈真随机数的如何的处理问题,还有取到了数又该如何变化的问题。如果更深化的话,还需要要论及世界的本质之类的哲学命题,暂且不表。就目前起卦程序主要在网上起而言,关联于时间的起卦法也许还有可商议之处,而对随机要求性较强的起卦方法是很不适合的。
1. 如何产生一定范围内的随机数?
直接的方法是:
rand() % N;
返回从 0 到 N - 1 的数字。但这个方法不好,因为许多随机数发生器的低位比特并不随机。一个较好的方法是:
(int)((double)rand() / ((double)RAND_MAX + 1) * N);
如果你不希望使用 double,另一个方法是:
rand() / (RAND_MAX / N + 1);
两种方法都需要知道 RAND_MAX,而且假设 N 要远远小于 RAND_MAX。ANSI 规定标准头文件 stdlib.h 中包含 RAND_MAX 的 #define。顺便提一下,RAND_MAX 是个常数,它告诉你 C 库函数 rand() 的固定范围。你不可以设 RAND_MAX 为其它的值,也没有办法要求 rand() 返回其它范围的值。如果你用的随机数发生器返回的是 0 到 1 的浮点值,要取得范围在 0 到 N - 1 内的整数,只要将随机数乘以 N 就可以了。
2. 为什么每次执行程序,rand() 都返回相同顺序的数字?
你可以调用 srand() 来初始化伪随机数发生器的种子,传递给 srand() 的值应该是真正的随机数,例如当前时间:
#include
#include
srand((unsigned int)time((time_t *)NULL));
请注意,在一个程序执行中多次调用 srand() 并不见得有帮助!不要为了取得“真随机数”而在每次调用 rand() 前都调用 srand()!
3. 我需要随机的真/假值,所以我用直接用 rand() % 2,可是我得到交替的 0, 1, 0, 1, 0 。
这是个低劣的伪随机数生成器,在低位比特中不随机!很不幸,某些系统就提供这样的伪随机数生成器。请试着使用高位比特,具体请参考本文第 1 点。

问题三:c语言随机数函数是什么? rand(产生随机数)
相关函数
srand
表头文件
#include
定义函数
int rand(void)
函数说明
rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。
返回值
返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。
范例
/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考
srand()*/
#include
main()
{
int i,j;
for(i=0;i
定义函数
void srand (unsigned int seed);
函数说明
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
返回值
范例
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/
#include
#include
main()
{
int i,j;
srand((int)time(0));
for(i=0;i>

问题四:C语言中产生随机数的函数是什么? #include
#include
#include
void main()
{
int i;
srand((unsigned)time(NULL));
i = rand() % 100;
}这样产生的随机数就是0-99之间的,
这二个函数的工作过程如下:
1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;
2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)
3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

问题五:随机数的计算公式是什么? 为追求真正的随机序列,人们曾采用很多种原始的物理方法用于生成一定范围内满足精度(位数)的均匀分布序列,其缺点在于:速度慢、效率低、需占用大量存储空间且不可重现等。为满足计算机模拟研究的需求,人们转而研究用算法生成模拟各种概率分布的伪随机序列。伪随机数是指用数学递推公式所产生的随机数。从实用的角度看,获取这种数的最简单和最自然的方法是利用计算机语言的函数库提供的随机数发生器。典型情况下,它会输出一个均匀分布在0和1区间内的伪随机变量的值。其中应用的最为广泛、研究最彻底的一个算法即线性同余法。
线性同余法LCG(Linear Congruence Generator)
选取足够大的正整数M和任意自然数n0,a,b,由递推公式:
ni+1=(af(ni)+b)mod M i=0,1,…,M-1
生成的数值序列称为是同余序列。当函数f(n)为线性函数时,即得到线性同余序列:
ni+1=(a*ni+b)mod M i=0,1,…,M-1
以下是线性同余法生成伪随机数的伪代码:
Random(n,m,seed,a,b)
{
r0 = seed;
for (i = 1;i 问题六:随机是什么意思 随机
1.
(1) [according to situation] 依照情势
必须具有一定的随机应变的能力,才能完成任务
2.
(2) [random]∶自由组合
随机抽样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式