陈默

陈默的博客

他的个人主页  他的博客

C语言的随机数

陈默  2009年09月04日 星期五 10:57 | 1833次浏览 | 6条评论

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

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

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

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

为了时程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。

另外,加上time参数即可。。。 srand(time(0)); i=rand(); 这样i就是一个真正意义上的随机数。

       The  rand()  function  returns  a  pseudo-random  integer  in the range [0,  RAND_MAX].

       The srand() function sets its argument as the seed for a  new  sequence
       of  pseudo-random  integers  to be returned by rand().  These sequences
       are repeatable by calling srand() with the same seed value.

       If no seed value is provided,  the  rand()  function  is  automatically
       seeded with a value of 1.

 

另外:

        x = rand()%11; /*产生1~10之间的随机整数*/

        y = rand()%51 - 25; /*产生-25 ~ 25之间的随机整数*/

        z = ((double)rand()/RAND_MAX)*(b-a) + a;/*产生区间[a,b]上的随机数*/

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !
王单单

回复 王单单  2009年09月04日 星期五 17:35

据说windows下的是这样的,呵呵
unsigned int g_seed = 0xXXXX;

int rand()
{
g_seed = g_seed * 0x343fd + 0x269ec3;
return (g_seed >> 16) & 0x7fff;
}

5条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号