gpt4 book ai didi

c++ - 在全双范围 std::uniform_real_distribution 总是返回 inf

转载 作者:行者123 更新时间:2023-12-03 06:51:38 25 4
gpt4 key购买 nike

考虑以下最小示例:

#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++ 标准允许的间隔的一些限制?

最佳答案

uniform_real_distribution 的要求之一就是两个界限之差小于std::numeric_limits<double>::max() .所以你的尝试是错误的。
作为一种解决方法,您可以将其拆分为两个生成器,一个用于负数,另一个用于非负数。随机选择两个生成器之一。
请记住,范围的上限不能作为生成的数字返回。

关于c++ - 在全双范围 std::uniform_real_distribution 总是返回 inf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64094198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com