我有2个数字,x和y,它们是已知的并且完全表示为浮点数。我想知道z = x - y是否总是精确的,或者是否可能发生舍入误差。对于简单的例子,很明显:
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
但是如果我有x和y这样使用所有有效数字并且它们具有相同的指数呢?我的直觉告诉我结果应该是准确的,但我希望看到某种证据。如果结果为负,会有所不同吗?
答案 0 :(得分:7)
我假设您希望这两个数字具有相同的符号。如果没有,答案是"是&#34 ;;考虑(-1) - nextafter(1, infinity)
,它在浮点运算中用-2
进行舍入到偶数。
在这个假设下,答案是"没有。"这(几乎)是Sterbenz定理的一个特例:如果x
和y
是相反符号的浮点数,那么|y|/2 <= x <= 2|y|
,那么x + y
可以完全表示为浮点数。
我说&#34;几乎&#34;因为你的陈述也适用于零和次正规数。