我尝试制作一个十进制随机数生成器,用户输入最小值和最大值
我查看了其他问题和答案,但是它们没有最小值和最大值或不起作用。
#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,但这是一个随机的负十进制数
答案 0 :(得分:6)
除非您输入了low
和high
的病理值,否则问题是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)
画一个数字。删除low
和high
的增量。