计算机算术

 

Floating-point number systems

Definition 4.1. 位置数字系统的基 base or radix of a positional numeral system 是表示数字的唯一记号的数量.

Definition 4.3.bit 是计算机基本单位,只能有 01 两种值.

Definition 4.4. 字节 byte 是计算机信息的单位,通常包含 8 位;它是计算机储存的最小单位.

 

Definition 4.7 (Floating point numbers). 浮点数 floating point number (FPN) 具有形式

(4.1)x=±m×βe

其中 β 是基, e[L,U] ,有效数字 significand or mantissa m 具有形式

(4.2)m=(d0+d1β++dp1βp1)

其中整数 di 满足 i[0,p1], di[0,β1]d0dp1 称为最大有效数字 most significant digit 和最小有效数字 least significant digitm 的数字串 string of digits 是字符串 d0.d1d2dp1 ,其中 .d1d2dp1 称为 m 的小数部分 fraction .

 

Algorithm 4.8. 十进制整数转为二进制的方法

  • 每次除以 2 ,然后记录余数,直到结果为 0 ,从后向前排列余数

97=((((((0×2+1)×2+1)×2+0)×2+0)×2+0)×2+0)×2+1=(1100001)2

十进制小数转为二进制的方法

  • 每次乘 2 ,检查整数部分是否不大于 1 ,如果是就记录 1 ,否则记录 0 ,直到结果为 0 ,从前向后排列

23=((13+1)×122+1)×12=(0.1010)2

写成括号嵌套的形式更为直观.

 

Definition 4.11 (FPN systems). 浮点数系统 floating point number system F 是有理函数 Q 的真子集,由 (β,p,L,U) 描述.

 

Definition 4.12. 一个 FPN 是正规的 normalized 如果它的有效数字 1m<β .

 

Definition 4.13. 非正规数 subnormal 是 FPNs 中 e=L, m(0,1) 的数,正规 FPN 系统可以通过包含非正规数扩张 extended .

 

Definition 4.14 (IEEE standard 754-2019). 当前的 IEEE 754 标准中的单精度 single precision 和双精度 double precision 浮点数有三种二进制格式和两种十进制格式;这里主要考虑 32 位比特: 1 位符号位 + 8 位指数 + 23 位有效数字,精度为 24 ,因为我们可以在正规二进制浮点系统中取 d0=1 ,然后不用存储 d0 .

 

Definition 4.16. 正规 FPN 系统 F 的机器精度 machine precision1.0F 中下一个较大的 FPN 的距离

(4.3)ϵM=β1p

按照格式整数加小数部分一共有 p 位有效数字,最后一位为 β1p .

 

Definition 4.17. 下溢极限 UFL 和上溢极限 OFL 为

(4.4)UFL(F)=min|F{0}|=βLOFL(F)=max|F|=βU(ββ1p)

下溢极限是最小的非零浮点数,上溢极限则是最大的浮点数.

 

Corollary 4.19 (Cardinality of F ). 对于二进制正规 FPN 系统,有

(4.5)#F=2p(UL+1)+1

Proof. 注意在二进制储存时不用存 d0 ,而是在这里存放符号,因此有 2×2p1 种有效数字,同时有 UL+1 种指数,再加上 0 就是所有的正规浮点数.

 

Definition 4.20. 正规 FPN 系统的范围 rangeR 的子集

(4.6)R(F)={x:xR, UFL(F)|x|OFL(F)}

它是两段区间,分别在正半轴和负半轴;注意 F 不能取得范围内的所有实数.

 

Definition 4.22. 两个正规 FPNs a,bF 中相邻 adjacent 当且仅当

(4.7)cF{a,b},|ab|<|ac|+|bc|

也就是两个数之间没有其它浮点数.

 

Lemma 4.23. 令两个正规 FPNs a,bF 中相邻,满足 |a|<|b|, ab>0 ,则

(4.8)β1ϵM|a|<|ab|ϵM|a|

Proof. 考虑 a=m×βe>0 ,则有 |ab|=ϵMβe ,由 1.0m<β

β1ϵM<|ab||a|ϵM

即证.

 

Rounding error analysis

Rounding a single number

Definition 4.24 (Rounding). 舍入 Rounding 是映射 fl:RF{+,,NaN} ,默认舍入是舍入到最近 round to nearest 的浮点数;在距离相等 tie 的情况下, fl(x) 选择舍入到最后一位为偶数 round to even .

 

Definition 4.25. 舍入数 fl(x) 上溢 overflows|x|>OFL(F) ,此时 fl(x)=NaN ;下溢 underflows0<|x|<UFL(F) ,此时 fl(x)=0 ;扩张的 FPN 系统的下溢称为渐进下溢 gradual underflow .

 

Definition 4.26. F 的单位舍入 unit roundoff

(4.9)ϵu=12ϵM=12β1p

Theorem 4.27 (Range of round-off errors). 对 xR(F)

(4.10)fl(x)=x(1+δ),|δ|<ϵu

Proof. 将浮点范围的实数舍入到 F 中,则我们考虑相邻的浮点数 xL,xRF, xLxxR ,相等的情况显然;否则

|fl(x)x|12|xRxL|ϵumin(|xL|,|xR|)<ϵu|x|

其中第一步由舍入到最近的特性得到,第二步由 Lemma 4.23 得到.

 

Theorem 4.28.xR(F)

(4.11)fl(x)=x1+δ,|δ|ϵu

Proof. 类似的有

|fl(x)x|12|xRxL|ϵumin(|xL|,|xR|)ϵu|fl(x)|

注意最后一步可以取等式.

 

Binary floating-point operations

Definition 4.30 (Addition/subtraction of two FPNs). 对 a,bF, a=Ma×βea, b=Mb×βeb, Ma=±ma, Mb=±mb ,不妨设 |a||b| ,在精度至少为 2p 的寄存器中计算 c=fl(a+b)F .

  • 比较指数
    • eaeb>p+1 ,相差超过范围,直接返回 c=a
    • 否则 ecea, MbMb/βeaeb ,这里对 Mb 右移即可
  • 加法 McMa+Mb 并在寄存器中进行舍入,精度为 2p
  • 正规化
    • Mc=0 ,返回 0
    • 否则移位使 Mc[1,β)
  • 检查范围
    • 上溢 NaN
    • 下溢 0
  • 舍入到精度 p
  • 返回 cMc×βce

需要注意,由于精度为 p ,舍入在第 p 位小数进行;对于加法,最多错开 p 位相加,然后舍入;对于减法,最多错开 p+1 位相减,特殊情况为

1.000×1009.000×105=1.0000.00009=0.99991009.999×101,p=4

上面错开 5 位,这是因为减法可能使得 d0=0 ,然后左移一位,因而舍入在原先的第 p+1 位小数进行.

 

Lemma 4.34.a,bF, a+bR(F)

(4.12)fl(a+b)=(a+b)(1+δ),|δ|<ϵu

Proof. 倒数第二步的舍入误差占主要地位,因为第二步舍入精度为 2p ,只有在错开 p+1 位时才有误差;然后由 Theorem 4.27 即证.

 

Definition 4.35 (Multiplication of two FPNs). 对 a,bF, a=Ma×βea, b=Mb×βeb, Ma=±ma, Mb=±mb ,在精度至少为 2p 的寄存器中计算 c=fl(ab)F .

  • 指数求和 ecea+eb
  • 乘法 McMaMb 并在寄存器中进行舍入
  • 正规化:移位使 Mc[1,β)
  • 检查范围
    • 上溢 NaN
    • 下溢 0
  • 舍入到精度 p
  • 返回 cMc×βce

两个 p 位精度的浮点数相乘得到 2p 位小数.

 

Lemma 4.37.a,bF, |ab|R(F)

(4.13)fl(ab)=(ab)(1+δ),|δ|<ϵu

Proof. 只有倒数第二步的舍入误差,由 Theorem 4.27 即证.

 

Definition 4.38 (Division of two FPNs). 对 a,bF, a=Ma×βea, b=Mb×βeb, Ma=±ma, Mb=±mb ,在精度至少为 2p+1 的寄存器中计算 c=fl(a/b)F .

  • 如果 mb=0 ,直接返回 NaN ;指数作差 eceaeb
  • 除法 McMa/Mb 并在寄存器中进行舍入
  • 正规化:移位使 Mc[1,β)
  • 检查范围
    • 上溢 NaN
    • 下溢 0
  • 舍入到精度 p
  • 返回 cMc×βce

 

Lemma 4.39.a,bF, a/bR(F)

(4.14)fl(ab)=ab(1+δ),|δ|<ϵu

Proof.|Ma|=|Mb| 时,没有误差;考虑 |Ma|>|Mb| ,则由 |Ma|,|Mb|[1,β) ,尽可能让商更小,有

β>βϵM>β2ϵM,|MaMb|βϵMβ2ϵM>1+β1ϵM

这意味着第三步正规化不需要进行;设有 p+k 精度,则舍入单位

12β1pk=12β1pβ1pβp1k=ϵuϵMβp1k

k=p+1 ,则舍入单位为 ϵuϵMβ2 ;记第二步舍入结果为 Mc1 ,倒数第二步舍入结果为 Mc2 ,从而

Mc2=Mc1+δ2,|δ2|<ϵu=MaMb+δ1+δ2,|δ1|<ϵuϵMβ2=MaMb(1+δ)|δ|=|δ1+δ2Ma/Mb|<ϵu(1+ϵMβ2)1+ϵMβ1<ϵu

考虑 |Ma|<|Mb| ,则类似的有

|MaMb|β2ϵMβϵM=1ϵMβϵM<1β1ϵM

因此第三步正规化一定会进行, Mc1 需要左移一位,因此

Mc1=MaMb+δ1,|δ1|<ϵuϵMβ2Mc2=βMc1+δ2=βMaMb(1+βδ1+δ2βMa/Mb),|δ2|<ϵu

我们考虑分母上的部分,进行缩放则有

β|MaMb|ββϵM=1+ϵMβϵM>1+β1ϵM

代入得到

|δ|=|βδ1+δ2βMa/Mb|<ϵuϵMβ1+ϵu1+β1ϵM=ϵu

即证.

 

Theorem 4.40 (Model of machine arithmetic). 记 F 为精度 p 的正规 FPN 系统,则对任意运算 =+,,×,/ ,我们有

(4.15)a,bF, abR(F),fl(ab)=(ab)(1+δ),|δ|<ϵu

当且仅当在 2p+1 精度的寄存器中计算.

 

The propagation of rounding errors

Theorem 4.41.i=0,1,,n, aiF, ai>0 ,则

(4.16)fl(i=0nai)=(1+δn)i=0nai

其中 |δn|<(1+ϵu)n1nϵu .

 

Theorem 4.44. 对给定的 μR+ 及正整数 nln2μ ,设 |δi|μ, i=1,2,,n ,则

(4.17)1nμi=1n(1+δi)1+nμ+(nμ)2

或者等价地对 In=[11+nμ,1]

(4.18)θIn,s.t.i=1n(1+δi)=1+θ(nμ+n2μ2)

Proof.|δi|μ, i=1,2,,n 可得

(1μ)ni=1n(1+δi)(1+μ)nenμ

我们将 f(μ)=(1μ)nμ=0 泰勒展开的拉格朗日余项有

(1μ)n=1nμ+12n(n1)θ21nμ

从而左边不等式得证,而

ex=1+x+x22+x33!+1+x+x22ex

x=nμln2 ,则有

enμ1+nμ+(nμ)2

右边不等式得证;最后,由于 i=1n(1+δi) 在连续函数 f(τ)=1+τ(1+nμ)nμ, τIn 的值域中,由中值定理即证.

 

Accuracy and stability

Avoiding catastrophic cancellation

Definition 4.45.x^xR 的逼近,则逼近精度可由绝对误差 absolute error

(4.18)Eabs(x^)=|x^x|

或者相对误差 relative error

(4.19)Erel(x^)=|x^x||x|

进行度量.

 

Definition 4.46. 对于通过 y^=f^(x) 逼近 y=f(x) ,向前误差 forward error 是逼近 y 的相对误差,向后误差 backward error 是满足 f(x^)=f^(x) 的用 x^ 逼近 x 的相对误差的最小值.

Note. 关于向后误差,我们原本想要的是 y=f(x) ,但必须通过 y^=f^(x) 来近似,也就是说我们计算的是 f^(x) ,有 f(x^)=f^(x) ,即我们实际计算的是 fx^ 处的值。总的来说,可以看作我们实际上是在用 fx^ 处的值逼近 fx 处的值,向后误差考虑的就是用于逼近的 x^ 关于实际的 x 的相对误差。

事实上,我们不需要考虑结果的误差,只要 x^x 足够近,也可以认为这种逼近是有效的。因为 f(x^)=f^(x) ,所以我们保证了用 f^(x) 逼近 f(x^) 是完全准确的,当 x^x 足够近,f(x^)f(x) 也足够近, f^(x) 可以看做是对 f(x) 的良好逼近.

 

Definition 4.47 (Accuracy). 计算 y=f(x) 的算法 y^=f^(x) 是精确的 accurate 如果它的向前误差对任意的 x 都很小

(4.20)c>0,s.t.xdom(f), Erel(f^(x))=|f^(x)f(x)f(x)|cϵu

 
Note. 糟糕的消去:我们知道乘法和除法是精确的,但是加法和减法不一定是精确的;事实上,通过计算

fl(fl(x)fl(y))=(1+C(x,y))(xy)

对于乘法和除法 C(x,y)=C ;而对于加法和减法 C(x,y)x+y0 .

 

Theorem 4.49 (Loss of most significant digits). 设 x,yF, x>y>0 ,且

(4.21)βt1yxβs

则在计算减法 xy 时最大有效数字的位数至多丢失 t ,至少丢失 s .

Proof. 我们写成浮点格式 x=mx×βn, y=my×βm, 1mx,my<β ,根据减法过程,首先对较小的 y 进行移位

y=(my×βmn)×βnxy=(mxmy×βmn)×βn

把相减后的有效数字记为 mxy ,则m

mxy=mxmy×βmn=mx(1my×βmmx×βn)=mx(1yx)

根据题中的不等式以及 mx 的条件有

βtmxy<β1s

因此进行正规化时,要左移至多 t 位,至少 s 位.

 

Note.x,y 是两个非常接近的数时,进行减法操作就会出现上面的问题,因此要尽量避免这种情况出现.

 

Backward stability and numerical stability

Definition 4.52 (Backward stability). 计算 y=f(x) 的算法 y^=f^(x) 是向后稳定的 backward stable

(4.20)c>0,s.t.xdom(f), x^dom(f),s.t.f^(x)=f(x^)  Erel(x^)cϵu

Definition 4.53. 计算 y=f(x1,x2) 的算法 y^=f^(x1,x2) 是向后稳定的 backward stable

(4.21)c1,c2>0,s.t.(x1,x2)dom(f), (x^1,x^2)dom(f),s.t.f^(x1,x2)=f(x^1,x^2)  Erel(x^1)c1ϵu, Erel(x^2)c2ϵu

也就是说对任何 x 的向后误差都足够小.

 

Lemma 4.54.f(x1,x2)=x1x2, x1,x2R(F) ,则算法 f^(x1,x2)=fl(fl(x1)fl(x2)) 是向后稳定的.

Proof. 直接计算

f^(x1,x2)=(x1(1+δ1)x2(1+δ2))(1+δ3)=x1(1+δ1+δ3+δ1δ3)x2(1+δ2+δ3+δ2δ3)

因此分别有

x^1=(1+δ1+δ3+δ1δ3)x1,x^2=(1+δ2+δ3+δ2δ3)x2

从而向后稳定.

 

Definition 4.56. 计算 y=f(x) 的算法 y^=f^(x) 是稳定的 stable 或数值稳定 numerically stable 当且仅当

(4.22)c,cf>0,s.t.xdom(f), x^dom(f),s.t.|f^(x)f(x^)f(x^)|cfϵu, Erel(x^)cϵu

注意这里第一个条件是关于 f(x^) 的相对误差,第二个条件是关于 x^ 的相对误差.

 

Lemma 4.57. 如果一个算法向后稳定,则它是数值稳定的.

Proof. 由向后稳定,有 f^(x)=f(x^) ,故第一个条件显然;第二个条件显然成立.

 

Condition numbers: scalar functions

Definition 4.59. 函数 y=f(x) 的相对条件数 condition number 是输入的微小变化对输出的相对变化的度量

(4.23)Cf(x)=|xf(x)f(x)|

Definition 4.60. 条件数小的问题称为是良态的 well-conditioned 否则称为是病态的 ill-conditioned .

 

Lemma 4.63. 考虑在单根 r 附近求解 f(x)=0 ,即有 f(r)=0, f(r)0 ,设有微小扰动 F=f+ϵg, f,gC2, g(r)0 且满足 |ϵg(r)||f(r)| ,则 F 有根 r+h ,其中

(4.24)hϵg(r)f(r)

Proof. 直接泰勒展开

0=F(r+h)=f(r)+hf(r)+ϵ[g(r)+hg(r)]+O(h2)

从而有

hϵg(r)f(r)+ϵg(r)ϵg(r)f(r)

即证.

 

Example 4.64 (Wilkinson). 定义

f(x)=k=1p(xk),g(x)=xp

考虑根 x=p 受到扰动 f+ϵg 后的影响.

由上面的引理,我们有

hϵg(r)f(r)=ϵpp(p1)!

p 很大时,扰动越来越大,因此求解高阶多项式的根几乎不可能.

 

Condition numbers: vector functions

Definition 4.65. 向量函数 f:RmRn 的条件数为

(4.25)condf(x)=xff(x)

其中 表示欧几里得范数.

 

Definition 4.68. 向量函数 f:RmRn 的分量条件数 component wise condition number

(4.26)condf(x)=A(x)

其中矩阵 A(x)=[aij(x)] ,每一个部分为

(4.27)aij(x)=|xjfixjfi(x)|

也就是说 aijfi(x) 关于 xj 的条件数.

 

Definition 4.70. 希尔伯特矩阵 Hilbert matrix HnRn×n

(4.28)hi,j=1i+j1

 
Definition 4.72. 范德蒙德矩阵 Vandermonde matrix VnRn×n

(4.29)vi,j=tji1

其中 t1,,tn 是参数.

 

Condition numbers: algorithms

Definition 4.74. 向量函数 f:RmRn 通过算法 fA:FmFn 逼近,设

(4.30)xFm, xARm,s.t.fA(x)=f(xA)

则算法 fA 的条件数定义为

(4.31)condA(x)=1ϵuinf{xA}xAxx

也就是向后误差的下确界.

 

Theorem 4.76. 设光滑函数 f:RR 由算法 A:FF, fA(x)=f(x)(1+δ(x)), |δ(x)|φ(x)ϵu 逼近,若 condf(x) 有界非零,则有

(4.32)xF,condA(x)φ(x)condf(x)

Proof. 设有 xA 满足 f(xA)=fA(x) ,将 xA 写作 x(1+ϵA) ,则

f(x)(1+δ)=f(xA)=f(x(1+ϵA))=f(x)+xϵAf(x)+O(ϵA2)  ϵA=f(x)xf(x)δ

计算相对误差

|xAxx|=|ϵA|=|f(x)xf(x)||δ(x)|  1ϵu|xAxx|=|δ(x)ϵucondf(x)|φ(x)condf(x)

xA 取下确界, x 取上确界即证.

 

Overall error of a computer solution

Theorem 4.79. 考虑正规 FPN 求解数学问题

(4.33)f:RmRn,y=f(x)

将计算机的输入输出表示为

(4.34)xx,yA=fA(x)

其中 fA 是逼近 f 的算法,则逼近 yy 的相对误差有界

(4.35)Erel(yA)Erel(xA)condf(x)+ϵucondf(x)condA(x)

Proof. 证明省略.

 

Problem

III.x=βe, eZ, L<e<U 为正规 FPN ,而 xL,xR 为两个相邻的正规 FPN 满足 xL<x<xR ,则 xRx=β(xxL) .

Proof.x=1×βe ,则有 xR=(1+1×β1p)×βe ,从而 xRx=β1p×βe=βe+1p ,而

xL=(β1)×(1+β1+β2++β1p)×βe1

从而有

xxL=(β(β1)×(1+β1+β2++β1p))×βe1=(β(β1)×1βp1β1)×βe1=(β(1βp)×β)×βe1=βep

xRx=β(xxL) .

 

IV. 在 IEEE 754 单精度下进行舍入.

35=(1.00110011)2×21xL=(1.0011001)2×21xR=(1.0011010)2×21

且有

xxL=35×224xRxL=224xRx=(xRxL)(xxL)=25×224

fl(x)=xR=(1.0011010)2×21

|xRxx|=23×224

注意舍入精度为 24 ,即保留到小数点后 23 位.

 

V. 如果 IEEE 754 单精度不再舍入到最近,而是直接截断,求单位舍入.

机器精度 ϵM=223 ,由于直接截断,则舍入的最大相对误差

ϵu=max|fl(x)xx|<max|223x|=223

从而 ϵu=223 .

 

VI. 在计算 1cos14 的精度损失.

根据定理 Theorem 4.49 我们计算

1yx=1cos141=1cos14

有范围

0.015625=26<1cos14<25=0.03125

故精度损失 6 位.

 

VII. 两种避免 1cosx 的精度损失的方法.

  • 计算泰勒展开

1cosx=1(1x22+x44!x66!)=x22x44!+x66!

  • 计算

1cosx=1cos2x1+cosx=sin2x1+cosx

用多个乘除法替代.

 

IX. 算法 A 估计 f(x)=1ex ,其中指数函数的相对误差为机器精度,对 [0,1] 估计 condA(x) .

利用估计

xF,condA(x)φ(x)condf(x)

不妨假设估计为 fA(x) ,在计算时忽略 δiδi ,则有

fA(x)=(1ex(1+δ1))(1+δ2)=1+δ2ex(1+δ1+δ2+δ1δ2)f(x)(1+δ2ex(δ1+δ2)1ex)=f(x)(1+δ(x))

考虑 |δ(x)|<ϵuφ(x) ,从而有

φ(x)=12ex1ex,condf(x)=|xf(x)f(x)|=xex1

其中 condf(x) 有界非零,代入估计式

condA(x)ex2x

从而在 x=0 附近算法条件数趋于无穷.

 

X. 寻找多项式的根

q(x)=i=0naixi,an=1, a00, aiR

可以考虑向量函数 f:RnC

r=f(a0,a1,,an1)

推导 f 基于 1 范数的分量条件数.

a=(a0,a1,,an1)T ,根据 q(x) 得到的函数 f

f(a)=i=0naixi

条件矩阵 A(a)1×n 矩阵

A(a)=1|f(a)|(|a0|,|a1x|,,|an1xn1|)

从而有

condf(a)=1|f(a)|(|a0|,|a1x|,,|an1xn1|)1=max(|a0|,|a1x|,,|an1xn1|)|i=0naixi|

对于 Wilkinson 情况,

f(x)=k=1p(xk)=xp+i=0p1bixi,g(x)=xp

则求 f+ϵg 的根等价于

f+ϵg=xp+i=0p1bixi+ϵxp=0  xp+i=0p1cixi=0, ci=bi1+ϵ

也就是说,求解 f+ϵg 的根实际上相当于对 f 的系数做出相对扰动

|cibi||bi|=ϵ1+ϵ

得到的首一多项式求根,应用之前首一多项式系数的条件数公式,它在 x=p 附近条件数趋于无穷,因此系数受到的扰动很大,它的根受到的扰动也很大.

 

XII. 在 IEEE 754 单精度 FPN 中,对区间 [128,129] 应用二分法,则绝对精度能否 <106

要满足 |xx|<106 ,但有整数部分 128=27 ,而

220<1×106<219

从而整数部分 8 位,小数部分 19 位,正规化后需要至少 27 位,因此不能达到要求.

posted @   Bluemultipl  阅读(219)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示
主题色彩