码迷,mamicode.com
首页 > 其他好文 > 详细

C中的rand函数和srand函数

时间:2015-05-11 10:51:45      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:random   c   

rand函数和srand函数


先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。

1、rand(产生随机数)

表头文件: #include<stdlib.h>

定义函数 :int rand(void)

函数说明 :

因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。

返回值:

返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。

0~RAND_MAX每个数字被选中的机率是相同的。


2、srand(设置随机数种子)

表头文件:#include<stdlib.h>

定义函数:void srand (unsigned int seed);

函数说明:

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。


代码示例:(用于产生20个0-100之间的随机数,若需要产生n~m的数呢?我们只要对rand()进行一些 符号操作就行了;n+rand()%(m-n+1); 即产生m-n之间的随机数再加上n)

/ crt_rand.c

// This program seeds the random-number generator

// with the time, then displays 10 random integers.

//

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int main( void )

{

    int i;

  

    // Seed the random-number generator with current time so that

    // the numbers will be different every time we run.

    //

    srand( (unsigned)time( NULL ) );

    // Display 10 numbers.

    for( i = 0;    i < 20;i++ )

       printf( "   %6d\n", rand() );

   printf("\n");

   // Usually, you will want to generate a number in a specific range,

   // such as 0 to 100, like this:

   {

      int RANGE_MIN = 0;

      int RANGE_MAX = 100;

      for (i = 0;     i < 20; i++ )

       {

          int rand100 = (((double) rand() /

                         (double) RAND_MAX) * (RANGE_MAX-RANGE_MIN) + RANGE_MIN);

          printf( "   %6d\n", rand100);

       }

   }



PS:rand()和random()的区别:

int rand(void):返回 0 ------RAND_MAX 之间的一个 int 类型整数,该函数为非线程安全函数。并且生成随机数的性能不是很好,已经不推荐使用

long int random(void):返回 0 ------- RAND_MAX 之间的一个 long 类型整数,该函数会产生一个非常大的随机值,最大为 16*((2**31)-1)。random 函数使用非线性反馈随机数发生器生成默认大小为31个长整数表所返回的连续伪随机数。

 

如果你使用 srandom 种植种子, 则你应该使用 random 返回随机数, 如果你使用 srand 种植种子, 则你应该使用rand返回随机数。

srand和rand官方已经不推荐使用。原因是产生随机数的性能不是很好, 另外是随机数的随机性没有random好, 再者就是不是线程安全。




C中的rand函数和srand函数

标签:random   c   

原文地址:http://blog.csdn.net/liucimin/article/details/45640617

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!