Can a subtraction between two exactly represented floating point numbers with the same floating point be inexact?

流过昼夜 提交于 2019-12-21 23:07:05

问题


I have 2 numbers, x and y, that are known and are represented exactly as floating point numbers. I want to know if z = x - y is always exact or if rounding errors can occur. For simple examples it's obvious:

x = 0.75 = (1 + 0.5) * 2^-1
y = 0.5 = 1 * 2^-1
z = x - y = 0.25 = 0.5 * 2^-1 = 1 * 2^-2

But what if I have x and y such that all significant digits are used and they have the same exponent? My intuition tells me the result should be exact, but I would like to see some kind of proof for this. Is it different if the result is negative?


回答1:


I am assuming that you want the two numbers to have the same sign. If not, the answer is "yes"; consider (-1) - nextafter(1, infinity), which works out to -2 in floating-point arithmetic with round-to-even.

Under this assumption, the answer is "no." This is (almost) a special case of Sterbenz's theorem: If x and y are floating-point numbers of opposite signs such that |y|/2 <= x <= 2|y|, then x + y is exactly-representable as a floating-point number.

I say "almost" because your statement also works for zero and subnormal numbers.



来源:https://stackoverflow.com/questions/26757610/can-a-subtraction-between-two-exactly-represented-floating-point-numbers-with-th

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!