具有相同浮点的两个精确表示的浮点数之间的减法是否可以不精确?

时间:2014-11-05 12:49:08

标签: floating-point floating-accuracy

我有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这样使用所有有效数字并且它们具有相同的指数呢?我的直觉告诉我结果应该是准确的,但我希望看到某种证据。如果结果为负,会有所不同吗?

1 个答案:

答案 0 :(得分:7)

我假设您希望这两个数字具有相同的符号。如果没有,答案是"是&#34 ;;考虑(-1) - nextafter(1, infinity),它在浮点运算中用-2进行舍入到偶数。

在这个假设下,答案是&#34;没有。&#34;这(几乎)是Sterbenz定理的一个特例:如果xy是相反符号的浮点数,那么|y|/2 <= x <= 2|y|,那么x + y可以完全表示为浮点数。

我说&#34;几乎&#34;因为你的陈述也适用于零和次正规数。