gpt4 book ai didi

c++ - std::uniform_real_distribution - 获取所有可能的数字

转载 作者:行者123 更新时间:2023-11-30 01:43:08 25 4
gpt4 key购买 nike

我想创建一个 std::uniform_real_distribution 能够生成 [MIN_FLOAT, MAX_FLOAT] 范围内的随机数。以下是我的代码:

#include <random>
#include <limits>
using namespace std;

int main()
{
const auto a = numeric_limits<float>::lowest();
const auto b = numeric_limits<float>::max();
uniform_real_distribution<float> dist(a, b);
return 0;
}

问题是,当我执行程序时,它被中止了,因为 ab 似乎是无效参数。我该如何解决?

最佳答案

uniform_real_distribution的构造函数需要:

a ≤ b and b − a ≤ numeric_limits<RealType>::max().

最后一个对你来说是不可能的,因为 lowest 之间的区别和 max ,根据定义,必须大于 max (而且几乎肯定会是 INF)。

有几种方法可以解决这个问题。正如 Nathan 指出的那样,最简单的方法就是使用 uniform_real_distribution<double>。 .除非double对于您的实现,无法存储 float 的范围(并且 IEEE-754 Float64 可以存储 Float32 的范围),这应该可以工作。你仍然会通过 numeric_limits对于 float , 但由于分布使用 double ,它可以处理增加范围的数学运算。

或者,您可以组合一个 uniform_real_distribution<float>用 bool 值 uniform_int_distribution (即,在 0 和 1 之间进行选择)。您的实际分布应该超过正数,最多为 max。 .每次你从 real 分布中得到一个数字,也从 int 分布中得到一个。如果整数为 1,则取反。

这样做的缺点是使零的概率略高于其他数字的概率,因为正零和负零是同一回事。

关于c++ - std::uniform_real_distribution - 获取所有可能的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38269960/

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