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

Dan*_*nny 14 c++ random numbers

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

int randomNum = rand() % 18 + (-9);
Run Code Online (Sandbox Code Playgroud)

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

NPE*_*NPE 30

不,它不会.您正在寻找:

int randomNum = rand() % 19 + (-9);
Run Code Online (Sandbox Code Playgroud)

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

  • 这是'rand()%number_of_distinct_values + first_value`的常见模式.如果你这样想,它看起来是正确的. (6认同)
  • 九个负数,九个正数和零= 19个数字.只需从-9到+9大声计算并检查它. (5认同)
  • 顺便说一下,为什么要加负九?为什么不减去九?当然,编译器无论如何都会这样做,但它看起来不对我(ymmv) (2认同)

Dav*_*rsa 7

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

供您参考

 rand() % N;
Run Code Online (Sandbox Code Playgroud)

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

正确的代码是

rand() % 19 + (-9);
Run Code Online (Sandbox Code Playgroud)


Kil*_*nDS 6

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

伪代码:

std::mt19937 gen(someSeed);
std::uniform_int_distribution<int> dis(-9, 9);
int myNumber = dis(gen)
Run Code Online (Sandbox Code Playgroud)