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

Lun*_*dis 2 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
Run Code Online (Sandbox Code Playgroud)

但是如果我有x和y使得所有有效数字都被使用并且它们具有相同的指数呢?我的直觉告诉我结果应该是准确的,但我希望看到某种证据.如果结果是否定的,它会有所不同吗?

tmy*_*ebu 8

我假设您希望这两个数字具有相同的符号.如果没有,答案是"是"; 考虑(-1) - nextafter(1, infinity),这适用-2于使用round-to-even的浮点算法.

在这种假设下,答案是"不".这(几乎)是Sterbenz定理的一个特例:If xy是具有相反符号的浮点数|y|/2 <= x <= 2|y|,那么它x + y可以精确地表示为浮点数.

我说"差不多",因为你的陈述也适用于零和次正规数.

  • 斯特本兹定理在文学中也称为斯特本兹引理。 (2认同)