给定数字的浮点分辨率

Tim*_*ers 1 c++ floating-point epsilon

我想知道给定值附近浮点数的epsilon.

std::numeric_limits<floating_point_type>::epsilon() 提供仅适用于数字1.0,而我想要一个函数来处理任何数字.

这有什么标准库解决方案吗?如果不是 - 我应该如何实现这个功能?

Sne*_*tel 5

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

std::nextafter(x, std::numeric_limits<floating_point_type>::infinity()) - x
Run Code Online (Sandbox Code Playgroud)

同样地,为了找到低于该值的epsilon,您可以这样做

x - std::nextafter(x, -std::numeric_limits<floating_point_type>::infinity())
Run Code Online (Sandbox Code Playgroud)

请注意,如果x是2的精确幂,那么这两个将不相同.

现在,有一个轻微的警告有:以上所计算的小量FLT_MAX将是无穷大(可以说这是一种正确的答案,但它并不完全符合IEEE-754的四舍五入规则)及以上的无限小量将是NaN(而这,也,我不知道我对此感觉如何).在所有其他情况下,结果将是准确的.

  • 很好,我不知道!(自C++ 11起可用) (2认同)