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

发布于 2024-12-11 22:36:09 字数 114 浏览 0 评论 0原文

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

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

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

just wondering, if I have the following code:

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

will this create a random number from -9 to 9?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

泼猴你往哪里跑 2024-12-18 22:36:09

不,不会的。您正在寻找:

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

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

No, it won't. You're looking for:

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

There are 19 distinct integers between -9 and +9 (including both), but rand() % 18 only gives 18 possibilities. This is why you need to use rand() % 19.

梦境 2024-12-18 22:36:09

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

伪代码:

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

Do not forget the new C++11 pseudo-random functionality, could be an option if your compiler already supports it.

Pseudo-code:

std::mt19937 gen(someSeed);
std::uniform_int_distribution<int> dis(-9, 9);
int myNumber = dis(gen)
黑凤梨 2024-12-18 22:36:09

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

请参考

 rand() % N;

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

正确的代码是

rand() % 19 + (-9);

Your code returns number between (0-9 and 17-9) = (-9 and 8).

For your information

 rand() % N;

returns number between 0 and N-1 :)

The right code is

rand() % 19 + (-9);
挽袖吟 2024-12-18 22:36:09

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

但计算机使用包含零的整数(Z 集),这使得它有 19 个数字。

从 rand() 与 RAND_MAX 获得的最小比率为 0,因此您需要减去 9 才能得到 -9。

以下信息已被弃用。它不在 aymore 的联机帮助页中。我还建议使用 现代 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.));

You are right in that there are 18 counting numbers between -9 and 9 (inclusive).

But the computer uses integers (the Z set) which includes zero, which makes it 19 numbers.

Minimum ratio you get from rand() over RAND_MAX is 0, so you need to subtract 9 to get to -9.

The information below is deprecated. It is not in manpages aymore. I also recommend using modern C++ for this task.

Also, manpage for the rand function quotes:

"If you want to generate a random integer between 1 and 10, you should always do it by using high-order bits, as in

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

and never by anything resembling

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

(which uses lower-order bits)."

So in your case this would be:

int n= -9+ int((2* 9+ 1)* 1.* rand()/ (RAND_MAX+ 1.));
四叶草在未来唯美盛开 2024-12-18 22:36:09

每当您有疑问时,您都可以运行一个循环,使用原始算法获取 1 亿个随机数,获取最低和最高值,然后看看会发生什么。

Anytime you have doubts, you can run a loop that gets 100 million random numbers with your original algorithm, get the lowest and highest values and see what happens.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文