一个库函数和一个基本问题
C语言提供了rand()
函数来生成[0, RAND_MAX]
区间内的随机整数. 使用之前需要种种子, 否则生成的第一个随机数永远和宇宙的终极答案差那么一点. 这里就不赘述了.
rand函数
但这种简单的功能显然不能满足众多计算机科学家的需要, 一般情况下, 我们需要一个优质的随机数生成器, 它可以生成[a, b]
区间内的整数. 声明为:
int randPro(int a, int b);
如何实现这个函数呢? 分歧就是从这里产生的.
两种写法和权威人士的选择
作为一个普通程序员, 我一开始的想法是这样的:
int randPro(int a, int b){
return a + rand() % (b - a + 1)
}
即, 将[0, RAND_MAX]
映射到[0, b-a]
的模数空间, 再将模数空间平移, 得到区间[a, b]
.
但当我查阅cppreference的时候, 我发现它的演示代码是这样的:
#include <st