随机数和负数

问题描述 投票:0回答:8

我必须生成范围内的数字 [-100; +2000] 在 c++ 中。如果只有正数可用,我该如何用 rand 做到这一点?有什么快速的方法吗?

c++ random negative-number
8个回答
44
投票

生成 0 到 2100 之间的随机数,然后减去 100。

快速谷歌搜索发现了一篇关于使用 Rand() 的看起来不错的文章。它在文章末尾包含了用于处理特定范围的代码示例。


9
投票

您可以使用 C++ TR1 随机函数生成所需分布的数字。

std::random_device rseed;
std::mt19937 rng(rseed());
std::uniform_int_distribution<int> dist(-100,2100);

std::cout << dist(rng) << '\n';

8
投票

生成 0 到 2100 之间的随机数,然后减去 100。


4
投票

这是代码。

#include <cstdlib>
#include <ctime>

int main()
{
    srand((unsigned)time(0));
    int min = 999, max = -1;
    for( size_t i = 0; i < 100000; ++i )
    {
        int val = (rand()%2101)-100;
        if( val < min ) min = val;
        if( val > max ) max = val;
    }

}

3
投票

你能生成一个 0-2100 之间的数字并减去 100 吗?


1
投票

在 C++0x 中,他们将对此进行增强,以通过标准库为其提供更好的支持。

http://www2.research.att.com/~bs/C++0xFAQ.html#std-random


0
投票

目前我的 C++ 语法有点生疏,但你应该编写一个带有两个参数的函数:

size
offset

因此,您可以使用给定的

size
作为最大值生成数字,然后为其添加(负)偏移量。

该函数如下所示:

int GetRandom(int size, int offset = 0);

并且在您的情况下会被调用:

int myValue = GetRandom(2100, -100);

0
投票

我知道这可能为时已晚,但你就可以了:

从数学上来说: 令

a1
an
为要生成的伪随机整数的最小值和最大值 - 那么这些整数的可能值与添加
0 后在 
an - a1
a1
 之间的值相同
这些值中的每一个。

例如,

  • 要生成
    -100
    2000
    之间的随机整数,请生成
    0
    2100
    (2000 - (-100) = 2100) 之间的随机整数,然后将
    -100
    添加到每个结果数字。
  • 要生成
    100
    2000
    之间的随机整数,请生成
    0
    1900
    之间的随机整数 (2000 - 100 = 1900),然后将
    100
    添加到每个结果数字。

    您可以尝试使用较小的

    a1
    an
    值来尝试此公式,以更好地理解这个想法。

© www.soinside.com 2019 - 2024. All rights reserved.