给定数字的浮点分辨率
Floating point resolution at a given number
我想知道给定值附近的浮点数的 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(我不知道我对此有何看法)。在所有其他情况下,结果将是准确的。
我想知道给定值附近的浮点数的 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(我不知道我对此有何看法)。在所有其他情况下,结果将是准确的。