首页 > 编程知识 正文

c语言生成随机数代码,c语言生成1~100随机数

时间:2023-05-05 07:30:27 阅读:119832 作者:400

你可能已经多次讨论过随机数是如何在计算机上发生的,本文将更深入地讨论这个问题,阐述我对这个问题的理解。

首先,计算机绝对不会生成随机随机数。 计算机只能生成“伪随机数”。 其实绝对随机的随机数是理想的随机数,无论计算机如何发展,都不会产生绝对随机的随机数序列。 计算机只能生成相对随机数,即伪随机数。

伪随机数不是伪随机数。 这里的“伪”意味着有规则性,计算机生成的伪随机数是随机的,但也是有规则的。 怎么理解? 产生的伪随机数可以遵守一定的规律,也可以不遵守任何规律,伪随机数的一部分遵循一定规律,其他部分不遵守任何规律。 例如,“世上没有两片完全相同形状的树叶”,正是把焦点集中在事物的特性,即随机性上,但每种树的叶子都有相似的形状。 这正是事物的共性,即规律性。 从这个角度来看,我们将接受这样的事实:计算机只能生成伪随机数,而不能生成绝对随机的随机数。 (严格地说,这里的计算机是指根据冯诺依曼思想发展起来的电子计算机。 未来的量子计算机可能会生成基于自然规律的不可再现的“真”随机数)

那么,计算机随机数是如何生成的呢? 也有人可能说随机数来自“随机种子”。 没错,随机种子是生成随机数的随机数,而在计算机中,这样的“随机种子”是无符号整形数。 随机种子是从哪里得到的?

让我们来看看以下c程序。

//rand01.c

#包含

静态无符号int rand _ seed;

无符号随机(语音) )。

{

rand_seed=(rand_seed*12359 ) e536;

return(rand_seed );

}

voidRandom_start(void )。

{

int temp[2];

move data (0x 0040,0x 006 c,FP_seg ) temp ),FP _ off (temp ),4 );

RAND_SEED=temp[0];

}

主() )

{

未指定Int I,n;

random_start (;

for(I=0; i10; I )

printf('%u(t )、random ) );

printf((n );

}

该程序(rand01.c )完整阐述了随机数产生的过程。

首先,主程序调用random_start (方法。 random_start ) )我对方法的这个语句感兴趣。

move data (0x 0040,0x 006 c,FP_seg ) temp ),FP _ off (temp ),4 );

此函数用于移动内存数据。 其中,FP_seg(farpointertosegment )是取得temp数组段地址的函数,FP _ off (farpointertooffset )是取得temp数组的相对地址的函数

random用于根据随机种子RAND_SEED的值计算随机数。 该文如下:

rand_seed=(rand_seed*12359 ) e536;

用于计算随机数的方法。 随机数的计算方法因计算机而异,也因安装在同一台计算机上的操作系统而异。 我们分别在linux和windows上进行了尝试,同一随机种子在这两个操作系统上生成的随机数不同,表明计算方法不同。

现在,我们知道了随机种子来自哪里,以及随机数是如何从随机种子中计算出来的。 那么,随机种子为什么存储在内存的00403360006ch中?

31/3123

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。