Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中制作十进制随机数发生器?_C++ - Fatal编程技术网

如何在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标准是一个巨大的飞跃。