Floating point 向下和向上舍入的浮点算术错误

Floating point 向下和向上舍入的浮点算术错误,floating-point,floating-accuracy,ieee-754,Floating Point,Floating Accuracy,Ieee 754,用RD(f)和RU(f)表示通过在浮点算术中分别向下舍入和向上舍入计算函数f得到的计算近似值 假设我们从舍入误差分析中知道 |RD(f)-f |

用RD(f)和RU(f)表示通过在浮点算术中分别向下舍入和向上舍入计算函数f得到的计算近似值

假设我们从舍入误差分析中知道

|RD(f)-f | |RU(f)-f | RD(f)和RU(f)之间的差异界限是什么

|RD(f)-RU(f)|E,或

|RD(f)-RU(f)|2E

[UPD]除了评论:

考虑一个具有
p=4
(精度,有效位中的总位数,包括小数点左边的一个数字)和无限指数的“玩具”十进制浮点系统。对于该系统,单位舍入,
u
,定义如下:

u=1/2*10^{1-4}=0.0005
四舍五入至最近模式

u=10^{1-4}=0.001
用于任何定向舍入模式

让我们假设在这样的系统中需要计算
f=(1.324/1.567+1.641/1.878)

f
的精确值为
1.71872852921926…

误差分析表明

| RD(f)-f |设u为1和下一个大于1的可表示数之间的差值。(这是最小精度[ULP]为1的单位,即浮点格式的1的有效位中最低有效位的值。)

考虑函数f(x)=(4− (x+½u)− 3) /(½u)。f(1)的精确数学值为1,但向下舍入的计算值为0,向上舍入的计算值为0:

  • 向下舍入时,1+½u产生1,然后是4−1产生3,3产生3−3产生0
  • 四舍五入时,1+½u产生1+u,然后是4−(1+u)正好是3−但必须四舍五入到3,因为3−u不具有代表性(介于3和3之间−2u和3,因为[2,4]中的ULP是[1,2]和[3]中ULP的两倍−3产生0
因此,对于域x上的此函数∈{1} ,我们有一个误差界E=1,这样| RD(f)− f|≤ E和| RU(f)− f|≤ E、 但是| RD(f)− RU(f)|≤ 0

对比之下,考虑函数x+u− 1) /(½u)。同样,f(1)的精确数学值为1,但现在四舍五入的计算值为−1,向上舍入的计算值为+1

在这种情况下,我们有相同的误差界E=1,这样| RD(f)− f|≤ E和| RU(f)− f|≤ E、 但是现在| RD(f)上的最佳限制− RU(f)| is | RD(f)− RU(f)|≤ 2E

因此,一般来说,给定| RD(f)− f|≤ E和| RU(f)− f|≤ E、 |RD(f)上的最佳界− RU(f)|可以在0到2E之间波动

这大体上回答了这个问题。在一篇评论中,你问f=a1/b1+a2/b2+…+an/bn表示正ai和bi。考虑到约束条件,如果所有的b值都是可表示的,我认为每一个向下舍入的错误都必须有一个负(朝向)−∞) 对计算结果的影响,并且每个舍入误差必须具有正向影响(朝向)+∞). (如果任何b值不可表示,其四舍五入将对最终结果产生相反的影响,以下分析不适用。)如果E是最佳(最小)界,则| RD(f)− f | (如果您将<更改为≤, 那么,如果E是最佳界,那么| RD(f)− f|≤ E和| RU(f)− f|≤ E、 然后| RD(f)− RU(f)|≤ 当且仅当E为0时,E才有可能。显然,当E为0时,这是正确的,这意味着算术是精确的。如果E不为零,那么其中一个计算肯定有一些非零误差,因此另一个也有。由于误差随着计算的进行必然是单调的,因此最终误差必须保持非零且相反(电子签名)


[事实证明,我不需要f(x)中的参数x;我可以简单地使用问题中提出的常数函数f。然而,在我意识到我不需要它之前,我就这样写了演示。]

例如,让
f=a1/b1+a2/b2+…+an/bn
,其中
ai>0
bi>0
对于所有
i=1,2,…,n
。那么界将是E?这如何证明?也许你可以推荐那些对浮点区间进行错误分析的书籍?@KonstantinIsupov:你说的E是什么意思?你在使用它吗作为一个由浮点类型固定的值,比如“机器”ε?还是根据操作序列计算的某个值?E是根据操作序列计算的某个值。即,我需要计算
f=a1/b1+a2/b2+…+an/bn
(所有
ai>0
bi>0
)使用向下舍入和向上舍入。在这种情况下,
E=n*u*f
,其中
u
是单位舍入。对于定向舍入
u=2^{1-p}
,其中
p
是精度。感谢您的详细回答。关于
f=a1/b1+a2/b2+…+an/bn
对于正
ai
bi
:我认为如果每次向下舍入都会产生一个很大的负误差(接近边界),则相应的向上舍入误差(正)会很小,反之亦然。所以,如果− f |
接近
E
,然后
| RU(f)− f |
将接近
0
,反之亦然,如果
|RU(f)− f |
接近
E
,然后
| RD(f)− f |
将接近
0
。因此,
|RD(f)− RU(f)|
。还是错了?我在文章中添加了一个例子。这个例子中的错误分析是不正确的。当商在[1/10,1]中的除法
a/b
中向下(或向上)取整时,最大误差是u/10,而不是u,因为商的指数较低