我想知道给定值附近的浮点数的ε。
std::numeric_limits<floating_point_type>::epsilon()
仅针对数字1.0提供了此功能,而我希望函数可以对任何数字使用。
对此有任何标准库解决方案吗?如果没有,我应该如何实现该功能?
答案 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(嗯,我不知道我对此有何看法)。在所有其他情况下,结果都是准确的。