如何在C++中生成负随机整数

Pok*_*ace 1 c++ random

我写了一个接受整数的函数。如果用户输入例如 -5,它不会崩溃,但它会将其转换为正 =-(

int getRandoms(int size, int upper, int lower)
{
    int randInt = 0;
    randInt = 1 + rand() % (upper -lower + 1);
    return randInt;
}
Run Code Online (Sandbox Code Playgroud)

为了构建随机负整数,我应该在函数中更改什么?用户输入范围。

Sha*_*our 5

对此有两个答案,如果您使用的是C++11,那么您应该使用uniform_int_distribution,出于多种原因,例如为什么人们说使用随机数生成器时存在模偏差是可取的是一个例子,rand() 被认为有害的表示给出了一组更完整的原因。这是一个从 生成随机整数的示例-5 to 5

#include <iostream>
#include <random>

int main()
{
    std::random_device rd;

    std::mt19937 e2(rd());

    std::uniform_int_distribution<int> dist(-5, 5);

    for (int n = 0; n < 10; ++n) {
            std::cout << dist(e2) << ", " ;
    }
    std::cout << std::endl ;
}
Run Code Online (Sandbox Code Playgroud)

如果C++11不是一个选项,那么C 常见问题中描述的方法如何获得特定范围内的随机整数?是要走的路。使用该方法,您将执行以下操作以从 生成随机整数[M, N]

M + rand() / (RAND_MAX / (N - M + 1) + 1)
Run Code Online (Sandbox Code Playgroud)