如何在C++中制作十进制随机数发生器?
我尝试制作一个十进制随机数生成器,用户输入最小值和最大值 我查看了其他问题和答案,但它们要么没有最小值和最大值,要么不起作用如何在C++中制作十进制随机数发生器?,c++,C++,我尝试制作一个十进制随机数生成器,用户输入最小值和最大值 我查看了其他问题和答案,但它们要么没有最小值和最大值,要么不起作用 #include <iostream> #include <cstdlib> using namespace std; int main(){ int low; int high; cout<<"what is the lowest number?"; cin>>low; 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;
}
在我输入1min和10max参数后,我预计编译器给出的数字为1.346,但这是一个随机的负十进制数问题是,除非您输入了low和high的病理值,否则RAND_MAX+1可能会溢出int类型,因此,程序的行为是未定义的,环绕INT_MIN是一种常见的表现形式,可以解释您所观察到的情况 但考虑到使用兰德公司的解决方案总会有偏差,考虑
std::random_device rd;
std::mt19937 eng(rd());
std::uniform_real_distribution<> dist(low, high); // the range - does not include high
然后用disteng画一个数字。删除low和high的增量 只需使用标准库已经提供的内容:RAND_MAX+1可能会导致溢出。删除+1@NikBrusilovski这就是为什么我发表了一条评论,但我没有把它作为一个答案。那么为什么要麻烦呢?对于给定的代码,如果我输入1和10,那么1.346不是一个有效的结果,因为它小于2的下限,但是10.98是一个有效的结果。你为什么要增加高和低?@NikBrusilovski:吸引选票的最好方法是修饰问题:例如,从int main提交一个可编译的示例。然后记录实际结果。他需要统一的分布,他弄乱了用于输入的类型。@MarekR:Oops。让我们一起发表吧@真的!C++11标准是一个巨大的飞跃。