c++中-9到9的随机数

random number from -9 to 9 in C++

本文关键字:随机数 c++      更新时间:2023-10-16

只是想知道,如果我有以下代码:

int randomNum = rand() % 18 + (-9);

会创建一个从-9到9的随机数吗?

不会的。你要找的是:

int randomNum = rand() % 19 + (-9);

在-9和+9之间有19个不同的整数(包括两者),但rand() % 18只给出了18种可能。这就是为什么你需要使用rand() % 19

不要忘记新的c++ 11伪随机功能,如果你的编译器已经支持它,它可能是一个选项。

伪代码:

std::mt19937 gen(someSeed);
std::uniform_int_distribution<int> dis(-9, 9);
int myNumber = dis(gen)

您的代码返回介于(0-9和17-9)=(-9和8)之间的数字

供参考

 rand() % N;

返回0到N-1之间的数字:)

正确的代码是

rand() % 19 + (-9);

你是对的,在-9和9(包括)之间有18个计数数。

但是计算机使用的是整数(Z集),其中包括0,这使得它有19个数字。

rand()除以RAND_MAX的最小比值是0,所以你需要减去9得到-9。

不推荐使用以下信息。它不再出现在手册中。我还建议使用现代c++来完成这项任务。

还有rand函数的手册引用:

"如果你想生成1到10之间的随机整数,你应该总是使用高阶位,如

j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));

和任何类似的

j = 1 + (rand() % 10);

(使用低阶位)。"

在你的例子中就是:

int n= -9+ int((2* 9+ 1)* 1.* rand()/ (RAND_MAX+ 1.));

任何时候你有疑问,你可以运行一个循环,用你的原始算法得到1亿个随机数,得到最低和最高的值,看看会发生什么