C++ rand

C++ rand
 
  • rand() 产生随机数
    1. 伪随机数
    2. 周期是65535(猜测周期应该与RAND_MAX 有关)。即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。
    3. rand() 返回值非负整数,范围为[0, RAND_MAX]。由RAND_MAX决定。不同操作系统或编译器值会不同。
      1. 在VS中为“ #define RAND_MAX 0x7fff”,即为 32767。
      2. centos7中为“#define RAND_MAX 0x7fff ffff”,即 2147483647。
  • srand 设置随机数种子
    1. 若不设置随机数种子,rand() 产生的随机数在每次运行的时候都是与上一次相同的。
    2. 若要不同, 用函数 srand() 初始化它。可以利用 srand((unsigned int)(time(NULL)) 的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。
  • 生成指定范围内随机数的公式:
    1. [a,a+n]的随机数,a + rand() % n;a 是起始值,n 是范围。
    2.  [a,b) 的随机整数,使用 (rand() % (b-a))+ a;
    3.  [a,b] 的随机整数,使用 (rand() % (b-a+1))+ a;
    4. (a,b] 的随机整数,使用 (rand() % (b-a))+ a + 1;
    5.  0~1 之间的浮点数,使用 rand() / double(RAND_MAX)。
  • 注意:
    1. rand返回的是整数,如果直接使用 rand()/32768,得到的结果始终为0。需要改为rand()/ (double)32768,才能得到想要的效果。(网上有许多滥用“rand()/32768”的代码,需要注意)