C ++中从-9到9的随机数

时间:2011-10-25 10:32:45

标签: c++ random numbers

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

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

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

5 个答案:

答案 0 :(得分:29)

不,它不会。你在寻找:

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

-9和+9之间有19个不同的整数(包括两者),但rand() % 18只提供18种可能性。这就是您需要使用rand() % 19

的原因

答案 1 :(得分:7)

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

供您参考

 rand() % N;

返回介于0和N-1之间的数字:)

正确的代码是

rand() % 19 + (-9);

答案 2 :(得分:6)

不要忘记新的C++11 pseudo-random functionality,如果您的编译器已经支持它,可以选择它。

的伪代码:

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

答案 3 :(得分:3)

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

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

你从rand()获得的最小比率超过RAND_MAX是0,所以你需要减去9来得到-9。

以下信息已弃用。它不是在manpages中。我还建议您使用modern C++执行此任务。

另外,manpage for the rand function引用:

  
    

“如果要生成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.));

答案 4 :(得分:0)

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