Floating point 是否有可能证明| a-b+;b-a |<;=ulp(a)适用于所有双浮点数?

Floating point 是否有可能证明| a-b+;b-a |<;=ulp(a)适用于所有双浮点数?,floating-point,rounding,precision,numeric,Floating Point,Rounding,Precision,Numeric,所以我想知道,如果| a |>=| b |,不等式| a-b+b-a |=| b |或| a |一些预备知识: 我假设使用IEEE-754算法,使用二进制基数,四舍五入到最接近的偶数 我进一步假设所有操作数和运算结果都是有限的(既不是无穷大也不是NaN)。(如果可能出现无穷大或NaN,则命题是错误的。如果a和b的大小略小于可表示的最大有限值,但符号相反,则a−b是一个无穷大,所以a−b+b−a是一个无穷大,其大小超过了a的ULP。) 斜体表示数学变量,如a和b。代码格式表示计算的算术运算,例如

所以我想知道,如果| a |>=| b |,不等式| a-b+b-a |=| b |或| a |一些预备知识:

  • 我假设使用IEEE-754算法,使用二进制基数,四舍五入到最接近的偶数

  • 我进一步假设所有操作数和运算结果都是有限的(既不是无穷大也不是NaN)。(如果可能出现无穷大或NaN,则命题是错误的。如果a和b的大小略小于可表示的最大有限值,但符号相反,则
    a−b是一个无穷大,所以a−b+b−a
    是一个无穷大,其大小超过了a的ULP。)

  • 斜体表示数学变量,如a和b。代码格式表示计算的算术运算,例如a+b,而a+b是精确的数学结果

  • 我假设a和b是可表示的,这意味着我们从a等于
    a
    和b等于
    b
    开始,而不是从任意实数a和b开始,它们首先转换为可表示的值
    a
    b

  • 四舍五入到最接近偶数的最大误差为数学结果的½ULP。这是正确的,因为任何结果都位于一个可表示值上或两个可表示值之间。如果介于两个值之间,则“舍入到最近值”选择较近的一个值,其距离最多为两个值之间距离的一半

  • 对于“x的ULP”,我将写ULP(x)。如果x不是可表示值,则ULP(x)是小于| x |的最大可表示值的ULP

|a−b |最多是2 | a |,因为| b |≤ |a |。所以
a中的错误−b
最多为½ULP(2 | a),即1 ULP(a)。因此
a−b
=a−b+e表示某些舍入误差e和| e |≤ ULP(a)

现在考虑添加<代码> A的数学结果−b和

b
。数学结果是
a−b
+b=a−b+e+b=a+e。因此,数学结果在a的1ULP范围内,包括在内。那么,它能做些什么呢

根据ULP的定义,下一个大于a的可表示数字为a+ULP(a)。1下一个小于a的可表示数字通常为a− ULP(a),但可能是− ½ULP(a),如果a正好是2的幂(因此它是二进制代码中的最低数字,下一个较低的数字具有较小的指数)。即使在这种情况下,也有另一个代表性的数字在一个位置− ULP(a)

因此,数学结果a+e位于闭合区间[a]−ULP(a),a+ULP(a)],由两个可表示的数字限定。设x为更接近a+e的端点,并假设a+e根据舍入到最接近偶数的规则舍入到y。如果y在间隔之外,则从a+e到y的距离大于到x的距离,因为y在同一方向上超过x,或者因为y在另一个方向上,因此超出了另一个端点,该端点距离a+e至少与x一样远,因此y更远。因此,a+e舍入到一个端点或间隔内的某个其他可表示数字。因此,它四舍五入到一个ULP内的某个数字

因此
a−b+b
距离a最多1 ULP(a)

脚注
1为了舍入的目的,如果x是最大的可表示有限值,则x+ULP(x)被视为可表示,直到舍入决定完成。如果四舍五入导致选择x+ULP(x),则结果为∞. (对于负值,同样的us对称为真。)

最好指定评估a+b+b-a的评估顺序。假设这些运算是按文本顺序应用的,即从左到右?运算是根据IEEE-754执行的,是浮点基数二进制,是四舍五入到最接近偶数的关系?如果直接在操作数中或在运算过程中涉及无穷大或非,则命题为假。特别是,如果a和b接近最大可表示有限值,但符号相反,则
a-b
是一个无穷大,
a-b+b-a
,因此其大小大于a的ULP。讨论得好。一些澄清:Was“最多是2 | a |的½ULP”意味着“最多是2 |
a
|”的½ULP”?我希望精确数学a结果的ULP为0,因为它没有最后一位。或者你是用ULP(a)来表示ULP(四舍五入到最接近的双精度(a))-它与范围内的a有一些模糊性(下一个(2,0的一些幂)…2的一些幂)?@chux:我用a和b作为
a
b
,所以2 | a和2 |
a
。只有当我们开始计算时,数学和计算才会有所不同,比如在− b和
a-b
。如果我的评论不清楚,很抱歉。答案听起来仍然像ULP应用于数学计算,因为“
a-b
在a的1ULP范围内−b”。也许“a-b在
a的1 ULP范围内−b
“?回答得好,艾克。@chux:我还不清楚你的意思,但我想让答案更正式一些,所以我就这么做了。希望我能澄清一些事情。