我想知道给定值附近的浮点数的epsilon。
std::numeric_limits<floating_point_type>::epsilon()仅针对数字1.0提供了该功能,而我希望该函数可对任何数字使用。

是否有任何标准库解决方案?如果没有-我应该如何实现该功能?

最佳答案

好吧,最简单的解决方案是在值的正上方找到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上方计算出的epsilon将为无穷大(可以说是正确答案,但它与IEEE-754的舍入规则不完全匹配),而在无穷大之上的epsilon将为NaN(其中,好吧,我不知道我对此有何看法)。在所有其他情况下,结果将是准确的。

关于c++ - 给定数字的浮点分辨率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52317057/

10-11 21:31