【发布时间】:2020-09-27 23:22:53
【问题描述】:
考虑以下最小示例:
#include <random>
#include <iostream>
int main (const int argC, char* argV[] ) {
std::uniform_real_distribution<double> dist(std::numeric_limits<double>::lowest(), std::numeric_limits<double>::max());
std::random_device gen;
std::cout << dist(gen) << std::endl;
return 0;
}
我希望程序基本上可以打印double 范围内的任何数字。但是在我的机器上输出总是inf。如果我将double 替换为float,情况也是如此。
我可以很容易地想象这会因std::uniform_real_distribution 的错误实现而发生,例如从中抽取数字的区间长度不能表示为double。但是我的问题是,这确实是我的标准库实现中的一个错误,还是我错过了 C++ 标准允许的间隔的一些限制?
【问题讨论】: