如何在C ++中制作十进制随机数生成器?

时间:2019-06-28 16:33:23

标签: c++

我尝试制作一个十进制随机数生成器,用户输入最小值和最大值

我查看了其他问题和答案,但是它们没有最小值和最大值或不起作用。

#include <iostream>
#include <cstdlib>

using namespace std;    
int main(){
    int low;
    int high;
    cout<<"what is the lowest number?";
    cin>>low;
    cout<<"what is the highest number?";
    cin>>high;
    high++;
    low++;
    double random;
    srand( unsigned(time(NULL) ));
    random=(double)rand()/(RAND_MAX+1)*(high-low)+low;
    cout<<random;
}

在我输入参数1(最小值)和10(最大值)之后,我希望编译器给出的数字类似于1.346,但这是一个随机的负十进制数

1 个答案:

答案 0 :(得分:6)

除非您输入了lowhigh的病理值,否则问题是RAND_MAX + 1可能溢出int类型,因此行为程序的 undefined (环绕到INT_MIN是常见的表现,并且会解释您观察到的情况)。

但是考虑到使用rand()的解决方案始终会产生偏差,请考虑

std::random_device rd;
std::mt19937 eng(rd());
std::uniform_real_distribution<> dist(low, high); // the range - does not include high

并用dist(eng)画一个数字。删除lowhigh的增量。