Floating point 为什么9.0+;4.53+;4.53当β;=10和p=3?

Floating point 为什么9.0+;4.53+;4.53当β;=10和p=3?,floating-point,precision,floating-accuracy,Floating Point,Precision,Floating Accuracy,我正在阅读每一位计算机科学家都应该知道的关于浮点运算的这一段: (六) (假设三角形很平,即a≈ b+c,然后是s≈ A. 公式(6)中的项(s-a)减去两个相邻的数字,一个 其中可能有舍入误差。例如,如果a=9.0,b=c= 4.53,s的正确值为9.03,A为2.342…即使s(9.05)的计算值仅存在2 ulps的误差 A的计算值为3.04,误差为70 ulps 发件人: 我想知道为什么(a+b+c)/2等于9.05,其中a=9.0,而b=c=4.53 我假设它可能涉及的硬件将首先计算a+

我正在阅读每一位计算机科学家都应该知道的关于浮点运算的这一段:

(六)

(假设三角形很平,即a≈ b+c,然后是s≈ A. 公式(6)中的项(s-a)减去两个相邻的数字,一个 其中可能有舍入误差。例如,如果a=9.0,b=c= 4.53,s的正确值为9.03,A为2.342…即使s(9.05)的计算值仅存在2 ulps的误差 A的计算值为3.04,误差为70 ulps

发件人:

我想知道为什么
(a+b+c)/2
等于9.05,其中
a=9.0
,而
b=c=4.53

我假设它可能涉及的硬件将首先计算
a+b
,结果是
13.53
,四舍五入到
13.5
。然后
c
将被添加到
13.5
,得到
18.03
,最终四舍五入到
18.0
。最后,
18.0
除以
2
,得到ode>9.00,并赋予变量
s
。假定此硬件至少有一个保护位


那么哪里错了呢?

如果他们先做了
b+c=9.06
,然后加上
a+9.06=18.06
,四舍五入到
18.1
,他们就可以得到
9.05

我想这个细节并不重要,关键是只有三个有效数字

  • 您将以
    9.00
    9.05
    结束,但不是以正确的
    9.03
    结束(即使可以表示该数字)
  • 您所做的每一次附加操作都会引入更多的不精确性,因此最终结果可能远远超出三位数的限制(
    3.04
    vs
    2.342…
    ,甚至第一位数都不正确)
s=(a+b+c)/2