Can a subtraction between two exactly represented

2019-04-14 10:32发布

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条回答
对你真心纯属浪费
2楼-- · 2019-04-14 11:36

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.

查看更多
登录 后发表回答