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

时间:2018-04-01 14:02:56

标签: floating-point floating-accuracy ieee-754

RD(f) RU(f)表示通过在浮点运算中评估函数 f 获得的计算近似值分别向下舍入和向上舍入。

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

| RD(f) - f | < E

| 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.7187285282921926...

错误分析显示

| RD (f) - f | <= E

| RU (f) - f | <= E

其中E = n * u * (|1.324/1.567| + |1.641/1.878|), 并且,如上所述,u = 0.001

所以,

E = 2 * 0.001 * 1.7187285282921926 = 0.0034374570565843852

(这是一个粗略的估计,因为f被舍入了。)

现在让我们计算RD(f)RF(f)

RD(f) = RD(0.8449266113592853 + 0.8738019169329073) = RD(0.844 + 0.873) = 1.717

RU(f) = RU(0.8449266113592853 + 0.8738019169329073) = RU(0.845 + 0.874) = 1.719

所以,

|RD(f) - f| = 0.0017285282921926

|RU(f) – f| = 0.0002714717078074

|RD(f) - RU(f)| = 0.002 < 0.0034374570565843852

由此我认为|RD(f) - f| = E只有|RU(f) – f| = 0,反之亦然。因此,

| RD(f) - RU(f)| &lt; = E

或者这个例子有问题吗?

1 个答案:

答案 0 :(得分:2)

u 为1与下一个可表示的数字之间的差值大于1.(这是最小精度单位[ULP]为1,有效数字中最低有效位的值以浮点格式表示1。)

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

  • 向下舍入时,1 +½ u 产生1,然后4-1产生3,3-3产生0。
  • 当向上舍入时,1 +½ u 产生1 + u ,然后4-(1 + u )正好是3 < em> u 但必须向上舍入到3,因为3 u 不可表示(因为在[2]中的ULP,它在3-2 u 和3之间,4)是[1,2]中ULP的两倍,而3-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)|的最佳限制是| RD(f) - RU(f)| ≤2

所以,一般来说,给定| RD(f) - f | ≤ E 和| RU(f) - f | ≤ E ,| RD(f) - RU(f)|的最佳界限可以从0到2 波动。

总的来说回答了这个问题。在评论中,你会询问f = a1 / b1 + a2 / b2 + ... + an / bn是否为正ai和bi。给定约束,并且如果所有b值都是可表示的,我认为每个舍入误差必须对计算结果具有负(朝向-∞)效果,并且每个舍入误差必须具有正效果(朝向+∞)。 (如果任何b值不可表示,则其舍入将对最终结果产生相反的影响,并且以下分析不适用。)如果 E 是最佳(最小)限制,则| RD (f) - f | &LT; E 和| RU(f) - f | &LT; E ,那么| RD(f) - RU(f)|是不可能的&LT; E ,| RD(f) - RU(f)|必须&LT; 2 电子

(如果你改变&lt;to≤,那么,如果 E 是最好的界限,那么| RD(f) - f |≤ E 和| RU( f) - f |≤ E ,当且仅当 E 时,| RD(f) - RU(f)|≤ E 是可能的如果 E 为0,则显然是正确的,这意味着算术是精确的。如果 E 不为零,那么其中一个计算必须有一些非零错误,因此另一个也是如此。由于计算过程中错误必然是单调的,因此最终错误必须保持非零且符号相反。)

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