【问题标题】:Can a subtraction between two exactly represented floating point numbers with the same exponent be inexact?具有相同指数的两个精确表示的浮点数之间的减法是否不精确?
【发布时间】:2015-01-01 16:03:39
【问题描述】:

我有 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 会导致舍入和不精确的结果。
  • @Arvo:我假设您的意思是我的“简单示例”和标题不匹配?不过好点,我将编辑示例。

标签: floating-point floating-accuracy


【解决方案1】:

我假设您希望这两个数字具有相同的符号。如果不是,答案是“是”;考虑(-1) - nextafter(1, infinity),它在浮点算术中计算为-2

在这个假设下,答案是“不”。这(几乎)是 Sterbenz 定理的一个特例:如果 xy 是相反符号的浮点数,使得 |y|/2 <= x <= 2|y|,那么 x + y 可以精确表示为浮点数。

我说“几乎”是因为您的陈述也适用于零和次正规数。

【讨论】:

  • Sterbenz 定理在文献中也被称为 Sterbenz 引理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多