rand函数产生的随机数为什么是伪随机数

2020-11-26 05:50:46 字数 5568 阅读 4088

1楼:匿名用户

计算机的运行过程是一个

确定的过程,每一条指令都是确定,因此从根本上来讲,计算机产生不了真正意义上的随机数。

那么伪随机数怎么理解呢?举个最简单的例子,要随机产生0~9十个数,那么计算机可以循环快速的给出0、1、2、3、4、5、6、7、8、9、0、1……这样的一个数列,这个数列并不是随机的,而是有规律的(所以才叫做伪随机),当我们按下按钮,或者点下鼠标的瞬间,机器停止,并显示最后的一个数字(有点类似于玩***),这个过程我们挑选出来的数字好像是随机的,但其实并不是100%随机,只有我们去触发机器的那个时间点是随机的,其他都是有规律的,所以就是伪随机。

rand()函数就是给出一列数值(这列数值是被事先打乱,但是是固定的数值),所以属于伪随机数。只是机器执行到rand()函数的时间点是随机的,才让我们感觉执行结果是随机的一样。

c语言中的rand()函数,说是产生随机数的函数,可是为什么我在使用时产生的随机数就没变过呢?

2楼:

rand() 使用的随机数产生机制,称为伪随机数;

所以rand()也叫伪随机数发生器。

必须初始化一个真正的随机一点的数据,得到的才像一个真正的随机数。

所以使用它之前,要调用srand 函数初始化一下。

一般大家都喜欢用,系统当前时间来初始化它

#include

srand(time(null));/*或者 time_t tm;time(&tm);srand(tm);*/

.....

a[i]=rand() / rand_max * n;

/* 或者 a[i]=(double)rand() /( rand_max +1)* n; */

....

3楼:匿名用户

随机数函数是不真正的随机数,所以每次运行会有相同的结果,这个现象要用srand函数来解决,用srand函数初始化随机数生成器,可以避免生成相同的随机数

一般用电脑的时间来进行初始化

srand((unsigned) time(null));

4楼:龍__鳳

在程序前面加上srand(time(null));,保证随机种子在每次执行程序时都不一样,rand()得到的数就不一样了

5楼:何处可人生

你需要加一个种子,就是在用rand()之前加上srand(time(null))就好了;这样要用到头文件time.h;根据运行的系统时间不同了计算随机数,但其实这个函数并不是真随机,是伪随机,

6楼:旋风男孩儿

这是因为在使用rand()随机函数时之前要获取随机种子srand((unsigned)time(null));

7楼:匿名用户

我记得rand()是需要参数的,不同参数导致不同的序列,比如用当前时间作为参数就是一个不错的选择。

rand产生的是伪随机数,什么叫伪随机数?还有rand和srand有什么区别啊?

8楼:溦信

stdlib.h头文件中有宏#define rand_max 0x7fff

rand()产生一个0到0x7ffff即0到32767之间的随机数

rand()/(rand_max+1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).最后再加1,就成了一个求1到10之间随机数的式子了.

srand函数是随机数发生器的初始化函数,原型:

void srand(unsigned seed);

它需要提供一个种子,如:

srand(1);

直接使用1来初始化种子。

不过常常使用系统时间来初始化,即使用

time函数来获得系统时间,它的返回值为从 00:00:00 gmt, january 1, 1970

到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型在传给srand函数,即:

srand((unsigned) time(&t));

还有一个经常用法,不需要定义time_t型t变量,即:

srand((unsigned) time(null));

直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。

srand((int)getpid());

使用程序的id(getpid())来作为初始化种子,在同一个程序中这个种子是固定的

随机输出十个0-100之间的整数

#include

#include

#include

void main( void ) }

rand产生的是伪随机数,什么叫伪随机数?还有rand和srand有什么区别啊?谢谢了,大神帮忙啊

9楼:青春无悔°掳夔

stdlib.h头文件中有宏#define rand_max 0x7fff rand()产生一个0到0x7ffff即0到32767之间的随机数 rand()/(rand_max+1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).

最后再加1,就成了一个求1到10之间随机数的式子了. srand函数是随机数发生器的初始化函数,原型: void srand(unsigned seed); 它需要提供一个种子,如:

srand(1); 直接使用1来初始化种子。 不过常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:

00 gmt, january 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型在传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(null)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。

srand((int)getpid()); 使用程序的id(getpid())来作为初始化种子,在同一个程序中这个种子是固定的 随机输出十个0-100之间的整数 #include #include #include void main( void ) }

如何用rand函数产生一个随机数?

10楼:匿名用户

如果需要在数值a-b之间随即产生一个数,如下操作:

单元格中输入函数

=round(rand()*(c+a),3) 函数解释:在a-b区间范围内随即产生一个数,小数点后保留3位!

其中的=rand()*(c+a) 函数解释:以a为起点,步长为c 在a-b中随即产生一个数。

备注: c 为步长,也就是所取点的范围长度。在这里应该是c=b-a=round(#,3) 函数解释:数值#小数点后取3位.

11楼:匿名用户

rand()函数是产生随机数的一个随机函数。

注意:(1)使用该函数首先应在开头包含头文件stdlib.h

#include(c++建议使用#include,下同)

(2)在标准的c库中函数rand()可以生成0~rand_max之间的一个随机数,其中rand_max 是stdlib.h 中定义的一个整数,它与系统有关。

(3)rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:

printf("random numbers are: %i %i\n",rand(),rand());

(4)因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说c语言的随机并不是真正意义上的随机,有时候也叫伪随机数。

(5)为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。

只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。

实例:#include

#include

int main()

return 0;}

为什么c++ rand函数产生的随机数有相同的规律?

12楼:匿名用户

rand本质上产生的是伪随机数,不是真正意义上的随机数。已知常见的几种产生伪随机数的算法都是通过简单的迭代递推而产生,种子是决定性因素,一个相同种子产生的后续每一个伪随机数是可以一个个推算出来的。这也就是为什么使用rand函数之前一定要先用srand给一个比较随机一些的种子先初始化,一般用系统时间,因为程序运行的当前时刻是很难发生撞车的。

而没有正确的使用srand的程序,或者说每次都使用相同种子rand产生的伪随机数序列将完全相同。

13楼:匿名用户

要事先设置一个伪随机数种子(srand函数),种子相同,产生的随机数序列就相同,一般以当前时间为随机数种子,因为时间是一去不复返的,每时每刻时间都在变化,就可以保证每时每刻产生的随机数序列不同。

14楼:黑暗中的剑

伪随机数,通过一个算法获得

rand()随机函数是什么原理 10

15楼:

rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,c提供了 srand()函数,它的原形是void srand( int a) 功能是初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列,那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,利用srand((unsign)(time(null))是一种方法。

rand()随机函数产生的值的范围?

16楼:匿名用户

cplusplus中有这样的介绍:

rand函数产生一个0到rand_max的伪随机数,这里的rand_max因不同的实现而异,但rand_max至少为32767。(比如,msvc中通常为0x7fff,即32767,而linux平台下gcc中rand_max通常会远远大于这个值)

有一些其他编程语言的rand函数确实是产生一个[0.0, 1.0)之间的浮点数。比如matlab。

在c中,

rand() % 32会产生一个[0, 32)之间的伪随机数,那么rand() % 32 + 1的取值区间实际上是[1, 33)。

要产生[0, 32)(开区间)之间伪随机数:

rand() % 32即可;

要产生[0, 32](闭区间)之间伪随机数:

rand() % 33即可。

如何由均匀分布随机数产生正态分布随机数

1楼 匿名用户 当n个均匀分布互不相关时 它们的叠加就是t分布 而当n趋于无穷时 就是正态分布了 如何用excel产生符合正态分布的随机数值? 2楼 茗童 1 产生符合正态分布的随机数 输入 norminv rand mean standard dav ,mean是均值,standard dav是标...

有没有真正意义的随机数,excel有没有刷新随机数的函数或方法

1楼 理工可爱小达人 当然有了,这种仪器学校的实验室里多的很,有很多集成在脉冲触发器上,可以达到双用的效果,通过随机数字生成一定范围内可以达到随机数字脉冲波形触发,这很有用的,尤其是在 啊,还有一些工业上用来估算意外发生率。 c 中random next 128 产生的随机数是有规律的? 2楼 伪随...

世界上真的有随机数存在么,真正的随机数存在吗?

1楼 志存高远 存在,科学家在证明多元宇宙的时候,发射光子,发现它不是从本来通过计算的那个位子接收到。而是在别的地方随机出现的。这是别的平行宇宙的影响,对于我们宇宙是相当于没受任何因素的 真正的随机数存在吗? 2楼 匿名用户 你这个是哲学上还没有定论的问题,我们可以讨论科学上的真随机数的概念,随机性...