给定数字的浮点分辨率

时间:2018-09-13 15:31:06

标签: c++ floating-point epsilon

我想知道给定值附近的浮点数的ε。

std::numeric_limits<floating_point_type>::epsilon()仅针对数字1.0提供了此功能,而我希望函数可以对任何数字使用。

对此有任何标准库解决方案吗?如果没有,我应该如何实现该功能?

1 个答案:

答案 0 :(得分:5)

好吧,最简单的解决方案就是在值的正上方找到epsilon(即,从该值到下一个可表示的值的距离)

std::nextafter(x, std::numeric_limits<floating_point_type>::infinity()) - x

类似地,找到低于该值的epsilon,您可以

x - std::nextafter(x, -std::numeric_limits<floating_point_type>::infinity())

请注意,如果x是2的幂,则这两个将不相同。

现在,这里有一个轻微警告:FLT_MAX上方的计算出的ε将是无穷大的(可以说是种类的正确答案,但事实并非如此)不太符合IEEE-754的舍入规则),并且无穷大上方的epsilon将为NaN(嗯,我不知道我对此有何看法)。在所有其他情况下,结果都是准确的。