§E20.1浮動小数点演算

最終更新

数値計算は実数の四則演算を計算機の上で行うが、計算機が保持することのできる数は、定められた基数と桁数の仮数と有限の範囲の指数によって表される有限個の数に限られる。その他の実数は、この有限集合の近くの元に置き換えられる。たとえば IEEE 754 の binary64 形式では1/101/10と1/51/5はそれ自身としては表されず、十進の入力0.10.1と0.20.2を変換してから加えた計算値は、3/103/10を直接変換した値とは隣り合う異なる数になる。

このような有限集合を浮動小数点数系といい、実数をその最も近い元へ写す写像を最近接丸めという。丸めの誤差は零・正規範囲・アンダーフローの範囲でそれぞれ異なる形をとり、正規範囲では相対誤差が単位丸め誤差という一定の数で押さえられる。四則演算の結果を厳密な結果の丸めとみなすと、この評価は一回の演算の誤差の評価となり、演算を重ねた計算値の誤差は各演算の誤差因子の積として評価される。和・内積・多項式の値の計算の誤差解析は、この積の評価から出発する。他方、桁落ちと情報落ちは各演算の誤差が単位丸め誤差の範囲にあっても起き、オーバーフローとアンダーフローでは正規範囲の評価そのものが成り立たない。

本記事では、浮動小数点数系と最近接丸めを定め、浮動小数点演算の誤差の基本的な性質と代表的な例について解説する。

1 浮動小数点数系

定義 1.1.β≥2\beta\ge2、p≥1p\ge1、emin⁡≤emax⁡e_{\min}\le e_{\max}を整数とし、整数eeに対してse:=βe+1−ps_e:=\beta^{e+1-p}と置く。次の三つの集合の和集合F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を、基数β\beta、仮数桁数pp、指数範囲[emin⁡,emax⁡][e_{\min},e_{\max}]の 浮動小数点数系 (floating-point number system) といい、FFの元を 浮動小数点数 (floating-point number) という。

  1. {0}\{0\}。
  2. {σmse∣σ∈{1,−1}, e,m∈Z, emin⁡≤e≤emax⁡, βp−1≤m≤βp−1}\{\sigma m s_e\mid \sigma\in\{1,-1\},\ e,m\in\Z,\ e_{\min}\le e\le e_{\max},\ \beta^{p-1}\le m\le\beta^p-1\}。この集合の元を 正規化数 (normalized number) という。
  3. {σmsemin⁡∣σ∈{1,−1}, m∈Z, 1≤m≤βp−1−1}\{\sigma m s_{e_{\min}}\mid \sigma\in\{1,-1\},\ m\in\Z,\ 1\le m\le\beta^{p-1}-1\}。この集合の元を 非正規数 (subnormal number) という。p=1p=1のとき、この集合は空である。

Nmax⁡:=(βp−1)semax⁡=βemax⁡+1(1−β−p)N_{\max}:=(\beta^p-1)s_{e_{\max}}=\beta^{e_{\max}+1}(1-\beta^{-p})と置く。βemin⁡≤∣z∣≤Nmax⁡\beta^{e_{\min}}\le|z|\le N_{\max}を満たす実数zzの全体をFFの 正規範囲 (normal range) という。実数zzが∣z∣>Nmax⁡|z|>N_{\max}を満たすときzzは オーバーフロー (overflow) の範囲にあるといい、0<∣z∣<βemin⁡0<|z|<\beta^{e_{\min}}を満たすときzzは アンダーフロー (underflow) の範囲にあるという。

補題 1.2.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系とする。0≤t≤Nmax⁡0\le t\le N_{\max}を満たす実数ttに対し、t<βemin⁡t<\beta^{e_{\min}}のときe(t):=emin⁡e(t):=e_{\min}と置き、t≥βemin⁡t\ge\beta^{e_{\min}}のときβe(t)≤t<βe(t)+1\beta^{e(t)}\le t<\beta^{e(t)+1}を満たす整数をe(t)e(t)と置く。

  1. emin⁡≤e≤emax⁡e_{\min}\le e\le e_{\max}を満たす整数eeに対して、F∩[βe,βe+1)={mse∣m∈Z, βp−1≤m≤βp−1}F\cap[\beta^e,\beta^{e+1})=\{ms_e\mid m\in\Z,\ \beta^{p-1}\le m\le\beta^p-1\}が成り立つ。特にNmax⁡N_{\max}はFFの最大元である。
  2. F∩[0,βemin⁡)={msemin⁡∣m∈Z, 0≤m≤βp−1−1}F\cap[0,\beta^{e_{\min}})=\{ms_{e_{\min}}\mid m\in\Z,\ 0\le m\le\beta^{p-1}-1\}が成り立つ。
  3. FFの各元x≠0x\ne0に対して、x=σmsex=\sigma ms_e、σ∈{1,−1}\sigma\in\{1,-1\}、emin⁡≤e≤emax⁡e_{\min}\le e\le e_{\max}を満たし、さらにβp−1≤m≤βp−1\beta^{p-1}\le m\le\beta^p-1であるかe=emin⁡e=e_{\min}かつ1≤m≤βp−1−11\le m\le\beta^{p-1}-1であるような整数の組(σ,e,m)(\sigma,e,m)はただ一つ存在する。
  4. x∈Fx\in Fが0≤x<Nmax⁡0\le x<N_{\max}を満たすならば、xxより大きいFFの元のうち最小のものはx+se(x)x+s_{e(x)}である。
  5. 0≤t≤Nmax⁡0\le t\le N_{\max}を満たす実数ttに対して、a≤t<a+se(t)a\le t<a+s_{e(t)}を満たすa∈Fa\in Fが存在し、a+se(t)∈Fa+s_{e(t)}\in Fであるかt=a=Nmax⁡t=a=N_{\max}である。t≥βemin⁡t\ge\beta^{e_{\min}}ならばa≥βe(t)a\ge\beta^{e(t)}である。

証明.0≤t≤Nmax⁡<βemax⁡+10\le t\le N_{\max}<\beta^{e_{\max}+1}ならばemin⁡≤e(t)≤emax⁡e_{\min}\le e(t)\le e_{\max}である。βp−1≤m≤βp−1\beta^{p-1}\le m\le\beta^p-1ならばβe=βp−1se≤mse≤(βp−1)se<βe+1\beta^e=\beta^{p-1}s_e\le ms_e\le(\beta^p-1)s_e<\beta^{e+1}であるから、正規化数σmse\sigma ms_eの絶対値は[βe,βe+1)[\beta^e,\beta^{e+1})に属する。これらの区間はeeごとに交わらない。正の非正規数msemin⁡ms_{e_{\min}}はmsemin⁡≤(βp−1−1)semin⁡<βemin⁡ms_{e_{\min}}\le(\beta^{p-1}-1)s_{e_{\min}}<\beta^{e_{\min}}を満たす。したがってF∩[βe,βe+1)F\cap[\beta^e,\beta^{e+1})の元は指数eeの正の正規化数であり、(1)の等式が成り立つ。FFの正の元は[0,βemin⁡)[0,\beta^{e_{\min}})か、あるemin⁡≤e≤emax⁡e_{\min}\le e\le e_{\max}に対する[βe,βe+1)[\beta^e,\beta^{e+1})に属するので、FFの最大元はF∩[βemax⁡,βemax⁡+1)F\cap[\beta^{e_{\max}},\beta^{e_{\max}+1})の最大元(βp−1)semax⁡=Nmax⁡(\beta^p-1)s_{e_{\max}}=N_{\max}である。正規化数の絶対値はβemin⁡\beta^{e_{\min}}以上であるから、F∩[0,βemin⁡)F\cap[0,\beta^{e_{\min}})は00と正の非正規数からなり、(2)が成り立つ。

(3)を示す。σ\sigmaはxxの符号である。∣x∣≥βemin⁡|x|\ge\beta^{e_{\min}}ならば、∣x∣|x|は非正規数の絶対値ではなく、∣x∣∈[βe,βe+1)|x|\in[\beta^e,\beta^{e+1})からe=e(∣x∣)e=e(|x|)、m=∣x∣/sem=|x|/s_eが定まる。∣x∣<βemin⁡|x|<\beta^{e_{\min}}ならば、∣x∣|x|は正規化数の絶対値ではないのでe=emin⁡e=e_{\min}、m=∣x∣/semin⁡m=|x|/s_{e_{\min}}である。

(4)を示す。x≥βemin⁡x\ge\beta^{e_{\min}}とし、e:=e(x)e:=e(x)と置く。(1)によりx=msex=ms_e、βp−1≤m≤βp−1\beta^{p-1}\le m\le\beta^p-1であり、(x,βe+1)(x,\beta^{e+1})に属するFFの元はm<m′≤βp−1m<m'\le\beta^p-1を満たすm′sem's_eである。m≤βp−2m\le\beta^p-2ならば、その最小元は(m+1)se=x+se(m+1)s_e=x+s_eである。m=βp−1m=\beta^p-1ならば(x,βe+1)(x,\beta^{e+1})にFFの元は無く、x<Nmax⁡x<N_{\max}であるからe<emax⁡e<e_{\max}であり、x+se=βe+1=βp−1se+1∈Fx+s_e=\beta^{e+1}=\beta^{p-1}s_{e+1}\in Fである。βe+1\beta^{e+1}以上の元はx+sex+s_e以上であるから、どちらの場合も最小元はx+sex+s_eである。0≤x<βemin⁡0\le x<\beta^{e_{\min}}の場合は、(2)によりx=msemin⁡x=ms_{e_{\min}}、0≤m≤βp−1−10\le m\le\beta^{p-1}-1であり、(m+1)semin⁡(m+1)s_{e_{\min}}はm+1≤βp−1−1m+1\le\beta^{p-1}-1ならば非正規数、m+1=βp−1m+1=\beta^{p-1}ならば正規化数βemin⁡\beta^{e_{\min}}である。(2)により[0,βemin⁡)[0,\beta^{e_{\min}})に属するFFの元はsemin⁡s_{e_{\min}}の整数倍であり、正規化数はβemin⁡\beta^{e_{\min}}以上であるから、(x,(m+1)semin⁡)(x,(m+1)s_{e_{\min}})にFFの元は無く、最小元はx+semin⁡x+s_{e_{\min}}である。

(5)を示す。a:=max⁡{y∈F∣y≤t}a:=\max\{y\in F\mid y\le t\}と置く。0∈F0\in Fであるからaaは存在する。t≥βemin⁡t\ge\beta^{e_{\min}}ならばβe(t)=βp−1se(t)∈F\beta^{e(t)}=\beta^{p-1}s_{e(t)}\in Fかつβe(t)≤t\beta^{e(t)}\le tであるからβe(t)≤a≤t<βe(t)+1\beta^{e(t)}\le a\le t<\beta^{e(t)+1}であり、e(a)=e(t)e(a)=e(t)である。t<βemin⁡t<\beta^{e_{\min}}ならば0≤a<βemin⁡0\le a<\beta^{e_{\min}}であり、e(a)=emin⁡=e(t)e(a)=e_{\min}=e(t)である。a<Nmax⁡a<N_{\max}ならば、(4)によりa+se(t)a+s_{e(t)}はaaより大きい最小のFFの元であり、aaの最大性からa+se(t)>ta+s_{e(t)}>tである。a=Nmax⁡a=N_{\max}ならばNmax⁡=a≤t≤Nmax⁡N_{\max}=a\le t\le N_{\max}よりt=at=aである。▨

補題 1.3.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系とし、0≤t≤Nmax⁡0\le t\le N_{\max}を満たす実数ttに対してe(t)e(t)を補題 1.2の整数とする。

  1. 整数eeがemin⁡≤e≤emax⁡e_{\min}\le e\le e_{\max}を満たし、整数kkが∣k∣≤βp|k|\le\beta^pと∣kse∣≤Nmax⁡|ks_e|\le N_{\max}を満たすならば、kse∈Fks_e\in Fである。
  2. x∈Fx\in Fがx≠0x\ne0を満たすならば、1≤∣m∣≤βp−11\le|m|\le\beta^p-1を満たす整数mmが存在してx=mse(∣x∣)x=ms_{e(|x|)}が成り立つ。さらに、emin⁡≤e≤e(∣x∣)e_{\min}\le e\le e(|x|)を満たす任意の整数eeについて、xxはses_eの整数倍である。
  3. 0≤t≤t′≤Nmax⁡0\le t\le t'\le N_{\max}ならばe(t)≤e(t′)e(t)\le e(t')である。

証明. 演習とする(問題 6.2)。▨

定義 1.4.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系とする。

  1. u:=β1−p/2u:=\beta^{1-p}/2をFFの 単位丸め誤差 (unit roundoff) という。
  2. emin⁡≤0<emax⁡e_{\min}\le0<e_{\max}のとき、1=βp−1s01=\beta^{p-1}s_0とNmax⁡≥βemax⁡>1N_{\max}\ge\beta^{e_{\max}}>1はFFの元である。11より大きいFFの元のうち最小のものから11を引いた値ϵmach\epsilon_{\mathrm{mach}}をFFの 機械イプシロン (machine epsilon) という。

系 1.5.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})をemin⁡≤0<emax⁡e_{\min}\le0<e_{\max}を満たす浮動小数点数系とする。FFの機械イプシロンϵmach\epsilon_{\mathrm{mach}}と単位丸め誤差uuはϵmach=β1−p=2u\epsilon_{\mathrm{mach}}=\beta^{1-p}=2uを満たす。

証明.e(1)=0e(1)=0かつ1<Nmax⁡1<N_{\max}であるから、補題 1.2 (4)により11より大きい最小のFFの元は1+s0=1+β1−p1+s_0=1+\beta^{1-p}である。▨

例 1.6.F=F(2,3,−2,2)F=F(2,3,-2,2)とする。se=2e−2s_e=2^{e-2}であり、s−2=1/16s_{-2}=1/16、s−1=1/8s_{-1}=1/8、s0=1/4s_0=1/4、s1=1/2s_1=1/2、s2=1s_2=1である。補題 1.2 (1)と補題 1.2 (2)により、FFの正の元は次の2323個であり、∣F∣=2⋅23+1=47|F|=2\cdot23+1=47である。

  1. 正の非正規数は1/16, 1/8, 3/161/16,\ 1/8,\ 3/16である。
  2. [1/4,1/2)[1/4,1/2)に属する元は1/4, 5/16, 3/8, 7/161/4,\ 5/16,\ 3/8,\ 7/16である。
  3. [1/2,1)[1/2,1)に属する元は1/2, 5/8, 3/4, 7/81/2,\ 5/8,\ 3/4,\ 7/8である。
  4. [1,2)[1,2)に属する元は1, 5/4, 3/2, 7/41,\ 5/4,\ 3/2,\ 7/4である。
  5. [2,4)[2,4)に属する元は2, 5/2, 3, 7/22,\ 5/2,\ 3,\ 7/2である。
  6. [4,8)[4,8)に属する元は4, 5, 6, 74,\ 5,\ 6,\ 7である。

Nmax⁡=7N_{\max}=7、正規範囲の下端はβemin⁡=1/4\beta^{e_{\min}}=1/4、単位丸め誤差はu=1/8u=1/8、機械イプシロンは1/41/4である。正規化数msems_eは二進33桁の仮数による指数表示(m/4)⋅2e(m/4)\cdot2^eに対応し、たとえば5/4=5⋅2−2=(1.01)2×205/4=5\cdot2^{-2}=(1.01)_2\times2^0である。隣接する元の間隔は[0,1/2)[0,1/2)で1/161/16であり、e≥−1e\ge-1の帯[2e,2e+1)[2^e,2^{e+1})でses_eである。帯[2e,2e+1)[2^e,2^{e+1})の元xxに対する間隔の比は1/8<se/x≤1/41/8<s_e/x\le1/4を満たし、非正規数x=1/16x=1/16ではs−2/x=1s_{-2}/x=1である。

例 1.7. IEEE 754 の binary64 形式の有限数の全体はF(2,53,−1022,1023)F(2,53,-1022,1023)である。Nmax⁡=(253−1)2971=(2−2−52)21023≈1.7976931348623157×10308N_{\max}=(2^{53}-1)2^{971}=(2-2^{-52})2^{1023}\approx1.7976931348623157\times10^{308}、正規範囲の下端は2−1022≈2.2250738585072014×10−3082^{-1022}\approx2.2250738585072014\times10^{-308}、最小の正の非正規数はs−1022=2−1074≈4.94×10−324s_{-1022}=2^{-1074}\approx4.94\times10^{-324}である。系 1.5によりϵmach=2−52≈2.220446049250313×10−16\epsilon_{\mathrm{mach}}=2^{-52}\approx2.220446049250313\times10^{-16}、u=2−53≈1.1102230246251565×10−16u=2^{-53}\approx1.1102230246251565\times10^{-16}である。 CPython の sys.float_info は max・min・epsilon にそれぞれNmax⁡N_{\max}・2−10222^{-1022}・2−522^{-52}を与える。同じ sys.float_info の min_exp=-1021 と max_exp=1024 は仮数を[1/2,1)[1/2,1)に置く C の規約による指数であり、emin⁡=−1022e_{\min}=-1022、emax⁡=1023e_{\max}=1023とはそれぞれ11だけ異なる。

2 最近接丸め

定義 2.1.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系とし、zzを∣z∣≤Nmax⁡|z|\le N_{\max}を満たす実数とする。x∈Fx\in Fが任意のy∈Fy\in Fに対して∣x−z∣≤∣y−z∣|x-z|\le|y-z|を満たすとき、xxをzzの 最近接点 (nearest point) という。FFは空でない有限集合であるから、zzの最近接点は存在する。写像fl⁡ ⁣:[−Nmax⁡,Nmax⁡]→F\operatorname{fl}\colon[-N_{\max},N_{\max}]\to Fであって、各zzに対してfl⁡(z)\operatorname{fl}(z)がzzの最近接点であるものを、FFの 最近接丸め (rounding to nearest) という。

定理 2.2.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系、uuをその単位丸め誤差、fl⁡\operatorname{fl}をFFの最近接丸めとし、zzを∣z∣≤Nmax⁡|z|\le N_{\max}を満たす実数とする。

  1. z∈Fz\in Fならばfl⁡(z)=z\operatorname{fl}(z)=zである。特にfl⁡(0)=0\operatorname{fl}(0)=0である。
  2. zzが正規範囲にあるならば、∣δ∣≤u|\delta|\le uを満たす実数δ\deltaが存在してfl⁡(z)=z(1+δ)\operatorname{fl}(z)=z(1+\delta)が成り立つ。
  3. ∣z∣<βemin⁡|z|<\beta^{e_{\min}}ならば∣fl⁡(z)−z∣≤uβemin⁡=semin⁡/2|\operatorname{fl}(z)-z|\le u\beta^{e_{\min}}=s_{e_{\min}}/2が成り立つ。

証明.z∈Fz\in Fならば、zzとの距離が00であるFFの元はzzだけであるから、(1)が成り立つ。

t:=∣z∣t:=|z|と置く。F=−FF=-Fであるから∣fl⁡(z)−z∣=min⁡y∈F∣y−z∣=min⁡y∈F∣y−t∣|\operatorname{fl}(z)-z|=\min_{y\in F}|y-z|=\min_{y\in F}|y-t|である。補題 1.2 (5)により、a≤t<a+se(t)a\le t<a+s_{e(t)}を満たすa∈Fa\in Fがあり、a+se(t)∈Fa+s_{e(t)}\in Fであるかt=at=aである。a+se(t)∈Fa+s_{e(t)}\in Fならばmin⁡y∈F∣y−t∣≤min⁡{t−a, a+se(t)−t}≤se(t)/2\min_{y\in F}|y-t|\le\min\{t-a,\ a+s_{e(t)}-t\}\le s_{e(t)}/2であり、t=at=aならばmin⁡y∈F∣y−t∣=0\min_{y\in F}|y-t|=0である。いずれの場合も

∣fl⁡(z)−z∣≤se(t)2=uβe(t)|\operatorname{fl}(z)-z|\le\frac{s_{e(t)}}{2}=u\beta^{e(t)}

が成り立つ。zzが正規範囲にあるならばβe(t)≤t=∣z∣\beta^{e(t)}\le t=|z|であるから∣fl⁡(z)−z∣≤u∣z∣|\operatorname{fl}(z)-z|\le u|z|であり、δ:=(fl⁡(z)−z)/z\delta:=(\operatorname{fl}(z)-z)/zと置けば(2)が成り立つ。∣z∣<βemin⁡|z|<\beta^{e_{\min}}ならばe(t)=emin⁡e(t)=e_{\min}であり、(3)が成り立つ。▨

補題 2.3.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系とする。x∈Fx\in Fに対し、x=0x=0のときm(x):=0m(x):=0と置き、x≠0x\ne0のとき補題 1.2 (3)の整数mmをm(x)m(x)と置く。

  1. β\betaが奇数であるかp≥2p\ge2であるとする。∣z∣≤Nmax⁡|z|\le N_{\max}を満たす実数zzが二つの最近接点を持つならば、そのうちm(x)m(x)が偶数であるものxxはちょうど一つである。
  2. β\betaが偶数でp=1p=1であり、整数eeがemin⁡≤e<emax⁡e_{\min}\le e<e_{\max}を満たすとする。z:=(β−1/2)βez:=(\beta-1/2)\beta^eの最近接点は(β−1)βe(\beta-1)\beta^eとβe+1\beta^{e+1}の二つであり、どちらもm(x)m(x)は奇数である。

証明.(1)を示す。zzの二つの最近接点をx<x′x<x'とする。z=(x+x′)/2z=(x+x')/2であり、(x,x′)(x,x')に属するy∈Fy\in Fは∣y−z∣<∣x−z∣|y-z|<|x-z|を満たすので、(x,x′)(x,x')にFFの元は無い。F=−FF=-Fかつm(−y)=m(y)m(-y)=m(y)であるから、zzを−z-zに替えてz≥0z\ge0としてよい。このときx′>0x'>0であり、0∈F0\in Fが(x,x′)(x,x')に属さないのでx≥0x\ge0である。x<x′≤Nmax⁡x<x'\le N_{\max}であるから、補題 1.2 (4)によりx′=x+se(x)x'=x+s_{e(x)}である。x<βemin⁡x<\beta^{e_{\min}}ならば、補題 1.2 (2)によりx=msemin⁡x=ms_{e_{\min}}、m=m(x)≤βp−1−1m=m(x)\le\beta^{p-1}-1であり、x′=(m+1)semin⁡x'=(m+1)s_{e_{\min}}はm(x′)=m+1m(x')=m+1を満たす。x≥βemin⁡x\ge\beta^{e_{\min}}かつm(x)≤βp−2m(x)\le\beta^p-2ならば、補題 1.2 (1)によりm(x′)=m(x)+1m(x')=m(x)+1である。これらの場合、m(x)m(x)とm(x′)m(x')は連続する整数であり、ちょうど一方が偶数である。残る場合はx≥βemin⁡x\ge\beta^{e_{\min}}かつm(x)=βp−1m(x)=\beta^p-1であり、このときx′=βe(x)+1=βp−1se(x)+1x'=\beta^{e(x)+1}=\beta^{p-1}s_{e(x)+1}からm(x′)=βp−1m(x')=\beta^{p-1}である。β\betaが奇数ならばβp−1\beta^p-1は偶数でβp−1\beta^{p-1}は奇数である。β\betaが偶数でp≥2p\ge2ならばβp−1\beta^p-1は奇数でβp−1\beta^{p-1}は偶数である。

(2)を示す。p=1p=1であるからse=βes_e=\beta^eであり、補題 1.2 (1)により(β−1)βe∈F(\beta-1)\beta^e\in Fでm((β−1)βe)=β−1m((\beta-1)\beta^e)=\beta-1である。e+1≤emax⁡e+1\le e_{\max}であるから、補題 1.2 (4)により(β−1)βe(\beta-1)\beta^eより大きい最小のFFの元はβe+1=1⋅se+1\beta^{e+1}=1\cdot s_{e+1}であり、m(βe+1)=1m(\beta^{e+1})=1である。zzはこの隣接する二元の中点であるから、最近接点はこの二元である。β\betaが偶数であるからβ−1\beta-1は奇数である。▨

定義 2.4.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を、β\betaが奇数であるかp≥2p\ge2である浮動小数点数系とし、m(x)m(x)を補題 2.3の整数とする。FFの最近接丸めfl⁡\operatorname{fl}であって、二つの最近接点を持つ各zzに対してm(fl⁡(z))m(\operatorname{fl}(z))が偶数であるものを、FFの 最近接偶数丸め (round to nearest, ties to even) という。補題 2.3 (1)により、最近接偶数丸めはただ一つ存在する。

例 2.5.F=F(2,3,−2,2)F=F(2,3,-2,2)とし、fl⁡\operatorname{fl}をFFの最近接偶数丸めとする。u=1/8u=1/8、βemin⁡=1/4\beta^{e_{\min}}=1/4、semin⁡=1/16s_{e_{\min}}=1/16である。9/89/8の最近接点は1=4s01=4s_0と5/4=5s05/4=5s_0であり、fl⁡(9/8)=1\operatorname{fl}(9/8)=1、δ=−1/9\delta=-1/9である。11/811/8の最近接点は5/4=5s05/4=5s_0と3/2=6s03/2=6s_0であり、fl⁡(11/8)=3/2\operatorname{fl}(11/8)=3/2、δ=1/11\delta=1/11である。どちらも∣δ∣≤u|\delta|\le uを満たす。15/6415/64はアンダーフローの範囲にあり、最近接点は1/41/4だけであって、∣fl⁡(15/64)−15/64∣=1/64|\operatorname{fl}(15/64)-15/64|=1/64である。3/323/32の最近接点は1/16=1⋅s−21/16=1\cdot s_{-2}と1/8=2s−21/8=2s_{-2}であり、fl⁡(3/32)=1/8\operatorname{fl}(3/32)=1/8である。絶対誤差は1/32=uβemin⁡1/32=u\beta^{e_{\min}}であり、定理 2.2 (3)の評価は等号で成り立つ。相対誤差は1/3>u1/3>uである。1/321/32の最近接点は00と1/161/16であり、m(0)=0m(0)=0であるからfl⁡(1/32)=0\operatorname{fl}(1/32)=0である。絶対誤差は1/32=uβemin⁡1/32=u\beta^{e_{\min}}、相対誤差は11である。

注意 2.6. 最近接丸めは∣z∣≤Nmax⁡|z|\le N_{\max}の範囲だけで定めた。z>Nmax⁡z>N_{\max}ならばFFの元はすべてzzより小さく、FFの元のうちzzに最も近いものはNmax⁡N_{\max}であるが、相対誤差(z−Nmax⁡)/z(z-N_{\max})/zはz→∞z\to\inftyで11に近づき、uuで押さえられない。 binary64 の最近接偶数丸めについて、IEEE 754 はNmax⁡<∣z∣<(2−2−53)21023N_{\max}<|z|<(2-2^{-53})2^{1023}のzzを±Nmax⁡\pm N_{\max}へ、∣z∣≥(2−2−53)21023|z|\ge(2-2^{-53})2^{1023}のzzを符号付きの無限大へ写す。(2−2−53)21023=Nmax⁡+2970(2-2^{-53})2^{1023}=N_{\max}+2^{970}はNmax⁡N_{\max}と210242^{1024}の中点である。 CPython の浮動小数点加算で、Nmax⁡+2969N_{\max}+2^{969}の計算値はNmax⁡N_{\max}、Nmax⁡+2970N_{\max}+2^{970}の計算値は無限大である。

3 四則演算のモデル

定義 3.1.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系、fl⁡\operatorname{fl}をFFの最近接丸めとし、∘∈{+,−,×,/}\circ\in\{+,-,\times,/\}とする。x,y∈Fx,y\in Fが、∘=/\circ=/のときy≠0y\ne0を満たし、∣x∘y∣≤Nmax⁡|x\circ y|\le N_{\max}を満たすとする。実数x∘yx\circ yを演算の厳密な結果といい、fl⁡(x∘y)\operatorname{fl}(x\circ y)を 正しく丸めた演算 (correctly rounded operation) の結果という。

系 3.2.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系、uuをその単位丸め誤差、fl⁡\operatorname{fl}をFFの最近接丸めとし、∘∈{+,−,×,/}\circ\in\{+,-,\times,/\}とする。x,y∈Fx,y\in Fが、∘=/\circ=/のときy≠0y\ne0を満たし、∣x∘y∣≤Nmax⁡|x\circ y|\le N_{\max}を満たすとする。

  1. x∘y∈Fx\circ y\in Fならばfl⁡(x∘y)=x∘y\operatorname{fl}(x\circ y)=x\circ yである。特にx∘y=0x\circ y=0ならばfl⁡(x∘y)=0\operatorname{fl}(x\circ y)=0である。
  2. x∘yx\circ yが正規範囲にあるならば、∣δ∣≤u|\delta|\le uを満たす実数δ\deltaが存在してfl⁡(x∘y)=(x∘y)(1+δ)\operatorname{fl}(x\circ y)=(x\circ y)(1+\delta)が成り立つ。
  3. 0<∣x∘y∣<βemin⁡0<|x\circ y|<\beta^{e_{\min}}ならば∣fl⁡(x∘y)−x∘y∣≤uβemin⁡|\operatorname{fl}(x\circ y)-x\circ y|\le u\beta^{e_{\min}}が成り立つ。
  4. ∘∈{+,−}\circ\in\{+,-\}かつ∣x∘y∣<βemin⁡|x\circ y|<\beta^{e_{\min}}ならばfl⁡(x∘y)=x∘y\operatorname{fl}(x\circ y)=x\circ yである。

証明.(1)、(2)、(3)は、定理 2.2をz=x∘yz=x\circ yに適用したものである。(4)を示す。x±y=0x\pm y=0ならば、(1)によりfl⁡(x±y)=x±y\operatorname{fl}(x\pm y)=x\pm yである。x±y≠0x\pm y\ne0とする。xxとyyのそれぞれは、00であるか、補題 1.3 (2)をe=emin⁡e=e_{\min}として適用してsemin⁡s_{e_{\min}}の整数倍である。したがってx±y=ksemin⁡x\pm y=ks_{e_{\min}}を満たす整数kkがあり、∣x±y∣<βemin⁡=βp−1semin⁡|x\pm y|<\beta^{e_{\min}}=\beta^{p-1}s_{e_{\min}}から∣k∣<βp−1≤βp|k|<\beta^{p-1}\le\beta^pである。∣ksemin⁡∣=∣x±y∣≤Nmax⁡|ks_{e_{\min}}|=|x\pm y|\le N_{\max}であるから、補題 1.3 (1)によりx±y∈Fx\pm y\in Fであり、(1)によりfl⁡(x±y)=x±y\operatorname{fl}(x\pm y)=x\pm yである。▨

系 3.3.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系、uuをその単位丸め誤差、fl⁡\operatorname{fl}をFFの最近接丸めとする。y,y′∈Fy,y'\in Fが∣y+y′∣≤Nmax⁡|y+y'|\le N_{\max}を満たすならば、∣δ∣≤u|\delta|\le uを満たす実数δ\deltaが存在してfl⁡(y+y′)=(y+y′)(1+δ)\operatorname{fl}(y+y')=(y+y')(1+\delta)が成り立つ。

証明.y+y′y+y'が正規範囲にあるならば、系 3.2 (2)により主張が成り立つ。∣y+y′∣<βemin⁡|y+y'|<\beta^{e_{\min}}ならば、系 3.2 (4)によりfl⁡(y+y′)=y+y′\operatorname{fl}(y+y')=y+y'であり、δ:=0\delta:=0とすればよい。▨

注意 3.4. IEEE 754 は、四則演算の結果を厳密な結果の丸めとして返すことを定め、既定の丸め方向を最近接偶数丸めとする。 binary64 の既定の丸め方向の下では、厳密な結果が[−Nmax⁡,Nmax⁡][-N_{\max},N_{\max}]にある演算の結果はfl⁡(x∘y)\operatorname{fl}(x\circ y)であって、系 3.2がu=2−53u=2^{-53}で適用される。 IEEE 754 は、00への丸め、+∞+\inftyへの丸め、−∞-\inftyへの丸めも定める。これらの丸め方向では計算値は補題 1.2 (5)の±a\pm aまたは±(a+se(∣z∣))\pm(a+s_{e(|z|)})であり、正規範囲のzzについて相対誤差はse(∣z∣)/βe(∣z∣)=β1−p=2us_{e(|z|)}/\beta^{e(|z|)}=\beta^{1-p}=2u以下である。中間結果を binary64 より広い形式で保持してから binary64 へ丸め直す実行環境や、非正規数の結果を00へ置き換える実行環境では、計算値がfl⁡(x∘y)\operatorname{fl}(x\circ y)と一致するとは限らず、系 3.2はそのままでは適用されない。既定の丸め方向(最近接偶数丸め)で実行した CPython の float では、本記事の binary64 の例に現れる演算のうち、厳密な結果が[−Nmax⁡,Nmax⁡][-N_{\max},N_{\max}]にあるすべての演算について、計算値がfl⁡(x∘y)\operatorname{fl}(x\circ y)と一致した。

例 3.5.F=F(2,53,−1022,1023)F=F(2,53,-1022,1023)とし、fl⁡\operatorname{fl}を最近接偶数丸めとする。FFの元は分母が22の冪である有理数であるから、1/101/10と1/51/5はFFに属さない。十進の入力0.10.1と0.20.2の変換値をx^:=fl⁡(1/10)\hat x:=\operatorname{fl}(1/10)、y^:=fl⁡(1/5)\hat y:=\operatorname{fl}(1/5)とすると、

x^=7205759403792794⋅2−56,y^=7205759403792794⋅2−55,\hat x=7205759403792794\cdot2^{-56},\qquad \hat y=7205759403792794\cdot2^{-55},x^−110=2−555,y^−15=2−545\hat x-\frac1{10}=\frac{2^{-55}}{5},\qquad \hat y-\frac15=\frac{2^{-54}}{5}

であり、入力の相対誤差はどちらも2−54=u/22^{-54}=u/2である。x^+y^=5404319552844595.5⋅2−54\hat x+\hat y=5404319552844595.5\cdot2^{-54}は[1/4,1/2)[1/4,1/2)に属し、s−2=2−54s_{-2}=2^{-54}であるから、最近接点は5404319552844595⋅2−545404319552844595\cdot2^{-54}と5404319552844596⋅2−545404319552844596\cdot2^{-54}の二つである。最近接偶数丸めによりfl⁡(x^+y^)=5404319552844596⋅2−54\operatorname{fl}(\hat x+\hat y)=5404319552844596\cdot2^{-54}であり、演算の誤差はfl⁡(x^+y^)−(x^+y^)=2−55\operatorname{fl}(\hat x+\hat y)-(\hat x+\hat y)=2^{-55}、その相対誤差は2−55/(x^+y^)≈9.25×10−17≤u2^{-55}/(\hat x+\hat y)\approx9.25\times10^{-17}\le uである。入力の誤差は(x^+y^)−3/10=3⋅2−55/5(\hat x+\hat y)-3/10=3\cdot2^{-55}/5であり、全体の誤差は

fl⁡(x^+y^)−310=3⋅2−555+2−55=2−525\operatorname{fl}(\hat x+\hat y)-\frac3{10}=\frac{3\cdot2^{-55}}{5}+2^{-55}=\frac{2^{-52}}{5}

である。全体の相対誤差2−52⋅2/3≈1.48×10−162^{-52}\cdot2/3\approx1.48\times10^{-16}はuuを超え、系 3.2が評価するのは演算の誤差2−552^{-55}だけである。一方fl⁡(3/10)=5404319552844595⋅2−54\operatorname{fl}(3/10)=5404319552844595\cdot2^{-54}であるから、fl⁡(x^+y^)=fl⁡(3/10)+2−54\operatorname{fl}(\hat x+\hat y)=\operatorname{fl}(3/10)+2^{-54}であり、二つの計算値はFFの隣接する異なる元である。

4 丸め誤差の積

補題 4.1.u≥0u\ge0を実数、k≥1k\ge1をku<1ku<1を満たす整数とし、γk:=ku/(1−ku)\gamma_k:=ku/(1-ku)と置く。実数δ1,…,δk\delta_1,\dots,\delta_kが∣δi∣≤u|\delta_i|\le uを満たし、ε1,…,εk∈{1,−1}\varepsilon_1,\dots,\varepsilon_k\in\{1,-1\}とする。このとき

∏i=1k(1+δi)εi=1+θk,∣θk∣≤γk\prod_{i=1}^k(1+\delta_i)^{\varepsilon_i}=1+\theta_k,\qquad |\theta_k|\le\gamma_k

を満たす実数θk\theta_kが存在する。

証明.k≥1k\ge1かつku<1ku<1であるから0≤u<10\le u<1である。各iiについて1−u≤1+δi≤1+u1-u\le1+\delta_i\le1+uであり、(1+u)(1−u)=1−u2≤1(1+u)(1-u)=1-u^2\le1から1+u≤(1−u)−11+u\le(1-u)^{-1}であるので、1−u≤1+δi≤(1−u)−11-u\le1+\delta_i\le(1-u)^{-1}が成り立つ。1+δi≥1−u>01+\delta_i\ge1-u>0であるから、逆数をとって1−u≤(1+δi)−1≤(1−u)−11-u\le(1+\delta_i)^{-1}\le(1-u)^{-1}も成り立つ。したがってP:=∏i=1k(1+δi)εiP:=\prod_{i=1}^k(1+\delta_i)^{\varepsilon_i}は(1−u)k≤P≤(1−u)−k(1-u)^k\le P\le(1-u)^{-k}を満たす。整数j≥0j\ge0に対して(1−u)j≥1−ju(1-u)^j\ge1-juが成り立つ。実際、j=0j=0では等号であり、(1−u)j≥1−ju(1-u)^j\ge1-juの両辺に1−u≥01-u\ge0を掛けると

(1−u)j+1≥(1−ju)(1−u)=1−(j+1)u+ju2≥1−(j+1)u(1-u)^{j+1}\ge(1-ju)(1-u)=1-(j+1)u+ju^2\ge1-(j+1)u

が得られる。j=kj=kとして(1−u)k≥1−ku>0(1-u)^k\ge1-ku>0であるから、θk:=P−1\theta_k:=P-1は

−ku≤θk≤11−ku−1=γk-ku\le\theta_k\le\frac{1}{1-ku}-1=\gamma_k

を満たす。0<1−ku≤10<1-ku\le1からku≤γkku\le\gamma_kであり、∣θk∣≤γk|\theta_k|\le\gamma_kが成り立つ。▨

例 4.2.FFを浮動小数点数系、uuをその単位丸め誤差、fl⁡\operatorname{fl}をFFの最近接丸めとし、n≥2n\ge2を(n−1)u<1(n-1)u<1を満たす整数、x1,…,xn∈Fx_1,\dots,x_n\in Fとする。p^1:=x1\hat p_1:=x_1、p^j:=fl⁡(p^j−1xj)\hat p_j:=\operatorname{fl}(\hat p_{j-1}x_j)(j=2,…,nj=2,\dots,n)と置き、各jjについて厳密な積p^j−1xj\hat p_{j-1}x_jが正規範囲にあると仮定する。系 3.2 (2)によりp^j=p^j−1xj(1+δj)\hat p_j=\hat p_{j-1}x_j(1+\delta_j)、∣δj∣≤u|\delta_j|\le uであり、jjに関する帰納法でp^n=x1⋯xn∏j=2n(1+δj)\hat p_n=x_1\cdots x_n\prod_{j=2}^n(1+\delta_j)が成り立つ。補題 4.1をk=n−1k=n-1、εj=1\varepsilon_j=1に適用してp^n=x1⋯xn(1+θn−1)\hat p_n=x_1\cdots x_n(1+\theta_{n-1})、∣θn−1∣≤γn−1|\theta_{n-1}|\le\gamma_{n-1}を得る。εj=−1\varepsilon_j=-1に適用するとx1⋯xn=p^n∏j=2n(1+δj)−1=p^n(1+θn−1′)x_1\cdots x_n=\hat p_n\prod_{j=2}^n(1+\delta_j)^{-1}=\hat p_n(1+\theta'_{n-1})、∣θn−1′∣≤γn−1|\theta'_{n-1}|\le\gamma_{n-1}を得る。F=F(2,3,−2,2)F=F(2,3,-2,2)、fl⁡\operatorname{fl}を最近接偶数丸め、n=4n=4、x1=⋯=x4=5/4x_1=\dots=x_4=5/4とすると、3u=3/8<13u=3/8<1、γ3=3/5\gamma_3=3/5である。p^2=fl⁡(25/16)=3/2\hat p_2=\operatorname{fl}(25/16)=3/2、p^3=fl⁡(15/8)=2\hat p_3=\operatorname{fl}(15/8)=2(最近接点7/4=7s07/4=7s_0と2=4s12=4s_1のうちmmが偶数である方)、p^4=fl⁡(5/2)=5/2\hat p_4=\operatorname{fl}(5/2)=5/2であり、厳密な積25/1625/16、15/815/8、5/25/2はいずれも正規範囲[1/4,7][1/4,7]に属する。厳密な値は(5/4)4=625/256(5/4)^4=625/256であり、θ3=(5/2)/(625/256)−1=3/125\theta_3=(5/2)/(625/256)-1=3/125、θ3′=(625/256)/(5/2)−1=−3/128\theta'_3=(625/256)/(5/2)-1=-3/128である。

注意 4.3. 「安定な和・内積・多項式評価」は、逐次和・内積・Horner 法の計算値を各演算の誤差因子の積で表し、補題 4.1によって後退誤差をγk\gamma_kで評価する。

5 桁落ち・情報落ち・オーバーフロー・アンダーフロー

定義 5.1.β≥2\beta\ge2とk≥1k\ge1を整数とし、x,yx,yを実数とする。xy>0xy>0、x≠yx\ne y、∣x−y∣≤β−kmax⁡{∣x∣,∣y∣}|x-y|\le\beta^{-k}\max\{|x|,|y|\}が成り立つとき、差x−yx-yで基数β\betaのkk桁の 桁落ち (cancellation) が起きるという。

命題 5.2.x,yx,yをx≠0x\ne0、y≠0y\ne0、x≠yx\ne yを満たす実数とし、ρ≥0\rho\ge0とする。

  1. ∣x^−x∣≤ρ∣x∣|\hat x-x|\le\rho|x|と∣y^−y∣≤ρ∣y∣|\hat y-y|\le\rho|y|を満たす任意の実数x^,y^\hat x,\hat yに対して∣(x^−y^)−(x−y)∣≤ρ(∣x∣+∣y∣)|(\hat x-\hat y)-(x-y)|\le\rho(|x|+|y|)が成り立つ。
  2. xy<0xy<0ならば∣x−y∣=∣x∣+∣y∣|x-y|=|x|+|y|であり、∣x^−x∣≤ρ∣x∣|\hat x-x|\le\rho|x|と∣y^−y∣≤ρ∣y∣|\hat y-y|\le\rho|y|を満たす任意の実数x^,y^\hat x,\hat yに対して∣(x^−y^)−(x−y)∣/∣x−y∣≤ρ|(\hat x-\hat y)-(x-y)|/|x-y|\le\rhoが成り立つ。
  3. 整数β≥2\beta\ge2、k≥1k\ge1について差x−yx-yで基数β\betaのkk桁の桁落ちが起き、ρ>0\rho>0であるとする。このときx^:=x(1+ρ)\hat x:=x(1+\rho)、y^:=y(1−ρ)\hat y:=y(1-\rho)は∣x^−x∣=ρ∣x∣|\hat x-x|=\rho|x|、∣y^−y∣=ρ∣y∣|\hat y-y|=\rho|y|と∣(x^−y^)−(x−y)∣/∣x−y∣=ρ(∣x∣+∣y∣)/∣x−y∣≥ρβk|(\hat x-\hat y)-(x-y)|/|x-y|=\rho(|x|+|y|)/|x-y|\ge\rho\beta^kを満たす。

証明.(x^−y^)−(x−y)=(x^−x)−(y^−y)(\hat x-\hat y)-(x-y)=(\hat x-x)-(\hat y-y)に三角不等式を適用して(1)を得る。xy<0xy<0ならばxxと−y-yは同符号であるから∣x−y∣=∣x∣+∣−y∣=∣x∣+∣y∣|x-y|=|x|+|-y|=|x|+|y|である。(1)により∣(x^−y^)−(x−y)∣≤ρ(∣x∣+∣y∣)=ρ∣x−y∣|(\hat x-\hat y)-(x-y)|\le\rho(|x|+|y|)=\rho|x-y|であり、(2)が成り立つ。差x−yx-yで基数β\betaのkk桁の桁落ちが起きるならばxy>0xy>0である。x^=x(1+ρ)\hat x=x(1+\rho)、y^=y(1−ρ)\hat y=y(1-\rho)に対して(x^−y^)−(x−y)=ρ(x+y)(\hat x-\hat y)-(x-y)=\rho(x+y)であり、x,yx,yが同符号であるから∣x+y∣=∣x∣+∣y∣|x+y|=|x|+|y|である。桁落ちの定義により∣x∣+∣y∣≥max⁡{∣x∣,∣y∣}≥βk∣x−y∣|x|+|y|\ge\max\{|x|,|y|\}\ge\beta^k|x-y|であるから、(3)が成り立つ。▨

例 5.3.F=F(2,53,−1022,1023)F=F(2,53,-1022,1023)、fl⁡\operatorname{fl}を最近接偶数丸めとし、x=11/10x=11/10、y=1y=1とする。x^:=fl⁡(11/10)=4953959590107546⋅2−52\hat x:=\operatorname{fl}(11/10)=4953959590107546\cdot2^{-52}であり、x^−11/10=2−51/5\hat x-11/10=2^{-51}/5、その相対誤差は2−50/11≈8.07×10−172^{-50}/11\approx8.07\times10^{-17}である。y^:=fl⁡(1)=1\hat y:=\operatorname{fl}(1)=1である。x^−y^=450359962737050⋅2−52=7205759403792800⋅2−56\hat x-\hat y=450359962737050\cdot2^{-52}=7205759403792800\cdot2^{-56}であり、252≤7205759403792800≤253−12^{52}\le7205759403792800\le2^{53}-1であるから補題 1.2 (1)によりx^−y^∈F\hat x-\hat y\in Fである。系 3.2 (1)によりfl⁡(x^−y^)=x^−y^\operatorname{fl}(\hat x-\hat y)=\hat x-\hat yである。(x^−y^)−1/10=2−51/5(\hat x-\hat y)-1/10=2^{-51}/5であるから、差の相対誤差は2−50≈8.88×10−16=8u2^{-50}\approx8.88\times10^{-16}=8uであり、入力の相対誤差の1111倍である。max⁡{∣x∣,∣y∣}/∣x−y∣=(11/10)/(1/10)=11\max\{|x|,|y|\}/|x-y|=(11/10)/(1/10)=11であり、23≤11<242^3\le11<2^4であるから、差x−yx-yで基数22の33桁の桁落ちが起き、44桁の桁落ちは起きない。この値は命題 5.2 (1)の上界ρ(∣x∣+∣y∣)/∣x−y∣=21ρ\rho(|x|+|y|)/|x-y|=21\rho(ρ=2−50/11\rho=2^{-50}/11)以下である。CPython で 1.1 - 1 を計算すると 0.10000000000000009 が表示される。

注意 5.4.a,b,ca,b,cをa≠0a\ne0、b>0b>0、ac>0ac>0、b2−4ac>0b^2-4ac>0を満たす実数とする。二次方程式ax2+bx+c=0ax^2+bx+c=0の根(−b+b2−4ac)/(2a)(-b+\sqrt{b^2-4ac})/(2a)の分子は正の二数b2−4ac\sqrt{b^2-4ac}とbbの差であり、命題 5.2 (1)の比は

b+b2−4acb−b2−4ac=(b+b2−4ac)24ac\frac{b+\sqrt{b^2-4ac}}{b-\sqrt{b^2-4ac}}=\frac{\bigl(b+\sqrt{b^2-4ac}\bigr)^2}{4ac}

である。この根の計算式の変形と、近い二つの浮動小数点数の差がFFに属することの一般形は、「安定な和・内積・多項式評価」で扱う。

定義 5.5.FFを浮動小数点数系、fl⁡\operatorname{fl}をFFの最近接丸めとし、x,y∈Fx,y\in Fがy≠0y\ne0と∣x+y∣≤Nmax⁡|x+y|\le N_{\max}を満たすとする。fl⁡(x+y)=x\operatorname{fl}(x+y)=xが成り立つとき、加算x+yx+yで 情報落ち (absorption) が起きるという。

命題 5.6.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系、fl⁡\operatorname{fl}をFFの最近接丸めとする。x∈Fx\in Fが∣x∣≥βemin⁡|x|\ge\beta^{e_{\min}}を満たし、e:=e(∣x∣)e:=e(|x|)を補題 1.2の整数とする。実数yyが∣x+y∣≤Nmax⁡|x+y|\le N_{\max}、∣y∣<se/2|y|<s_e/2を満たし、さらに∣x∣>βe|x|>\beta^eであるかxy≥0xy\ge0であるならば、fl⁡(x+y)=x\operatorname{fl}(x+y)=xが成り立つ。

証明.t:=x+yt:=x+y、s:=ses:=s_eと置く。F=−FF=-Fであり、xxがttのただ一つの最近接点であるという性質は(x,y)(x,y)を(−x,−y)(-x,-y)に替えても保たれるので、x>0x>0としてよい。∣t−x∣=∣y∣<s/2|t-x|=|y|<s/2である。x′∈Fx'\in F、x′≠xx'\ne xとする。x′>xx'>xならばx<Nmax⁡x<N_{\max}であり、補題 1.2 (4)によりx′≥x+sx'\ge x+sである。y≥0y\ge0ならば∣x′−t∣≥x+s−t=s−∣y∣>s/2>∣y∣|x'-t|\ge x+s-t=s-|y|>s/2>|y|であり、y<0y<0ならば∣x′−t∣>x−t=∣y∣|x'-t|>x-t=|y|である。x′<xx'<xかつy≥0y\ge0ならば∣x′−t∣>t−x=∣y∣|x'-t|>t-x=|y|である。x′<xx'<xかつy<0y<0ならば、仮定からx>βex>\beta^eであり、補題 1.2 (1)によりx−s∈Fx-s\in Fかつ(x−s,x)(x-s,x)にFFの元は無いのでx′≤x−sx'\le x-sである。したがって∣x′−t∣≥t−(x−s)=s−∣y∣>∣y∣|x'-t|\ge t-(x-s)=s-|y|>|y|である。いずれの場合も∣x′−t∣>∣x−t∣|x'-t|>|x-t|であるから、xxはttのただ一つの最近接点であり、fl⁡(x+y)=x\operatorname{fl}(x+y)=xである。▨

例 5.7.F=F(2,53,−1022,1023)F=F(2,53,-1022,1023)、x=1x=1とする。e(1)=0e(1)=0、s0=2−52s_0=2^{-52}である。y=2−54y=2^{-54}は∣y∣<2−53|y|<2^{-53}とxy>0xy>0を満たすので、命題 5.6により任意の最近接丸めでfl⁡(1+2−54)=1\operatorname{fl}(1+2^{-54})=1であり、加算1+y1+yで情報落ちが起きる。このときfl⁡(fl⁡(1+y)−1)=0≠y\operatorname{fl}(\operatorname{fl}(1+y)-1)=0\ne yである。一方1=(1+2−54)(1+δ)1=(1+2^{-54})(1+\delta)のδ=−2−54/(1+2−54)\delta=-2^{-54}/(1+2^{-54})は∣δ∣<u|\delta|<uを満たし、系 3.2 (2)の評価は和1+y1+yに対して成り立つ。y=2−53=s0/2y=2^{-53}=s_0/2では1+y1+yの最近接点は11と1+2−521+2^{-52}の二つである。m(1)=252m(1)=2^{52}、m(1+2−52)=252+1m(1+2^{-52})=2^{52}+1であるから、最近接偶数丸めではfl⁡(1+2−53)=1\operatorname{fl}(1+2^{-53})=1となり、他方の最近接点を選ぶ最近接丸めでは情報落ちは起きない。y=2−53+2−105=(252+1)s−53∈Fy=2^{-53}+2^{-105}=(2^{52}+1)s_{-53}\in Fは∣y∣>s0/2|y|>s_0/2を満たし、1+y1+yのただ一つの最近接点は1+2−521+2^{-52}である。y=−3⋅2−55∈Fy=-3\cdot2^{-55}\in Fは∣y∣<s0/2|y|<s_0/2を満たすが、x=β0x=\beta^0かつxy<0xy<0である。11の前のFFの元は1−2−53=(253−1)s−11-2^{-53}=(2^{53}-1)s_{-1}であり、1−3⋅2−551-3\cdot2^{-55}との距離は2−552^{-55}、11との距離は3⋅2−553\cdot2^{-55}であるから、fl⁡(1+y)=1−2−53≠1\operatorname{fl}(1+y)=1-2^{-53}\ne1である。

例 5.8.F=F(2,53,−1022,1023)F=F(2,53,-1022,1023)、fl⁡\operatorname{fl}を最近接偶数丸めとし、c:=fl⁡(10308)c:=\operatorname{fl}(10^{308})とする。c≥10308(1−u)>Nmax⁡/2c\ge10^{308}(1-u)>N_{\max}/2であるから、c+cc+cはオーバーフローの範囲にあり、系 3.2の仮定は(c+c)/2(c+c)/2の最初の演算で満たされない。 binary64 の演算はこの加算の結果を+∞+\inftyとし、(c+c)/2(c+c)/2の計算値も+∞+\inftyである。厳密な値(c+c)/2=c(c+c)/2=cは正規範囲にある。c=ms1023c=ms_{1023}と書くとc/2=ms1022∈Fc/2=ms_{1022}\in Fであるから、系 3.2 (1)によりfl⁡(c/2)=c/2\operatorname{fl}(c/2)=c/2であり、c/2+c/2=c∈Fc/2+c/2=c\in Fからfl⁡(c/2+c/2)=c\operatorname{fl}(c/2+c/2)=cである。計算式c/2+c/2c/2+c/2のすべての演算の厳密な結果は正規範囲にある。

例 5.9.F=F(2,53,−1022,1023)F=F(2,53,-1022,1023)、fl⁡\operatorname{fl}を最近接偶数丸めとし、d:=fl⁡(10−200)d:=\operatorname{fl}(10^{-200})とする。ddは正規範囲にあり、d2<2−1075=s−1022/2d^2<2^{-1075}=s_{-1022}/2である。FFの正の最小元はs−1022s_{-1022}であるから、d2d^2のただ一つの最近接点は00であり、fl⁡(d⋅d)=0\operatorname{fl}(d\cdot d)=0である。絶対誤差d2d^2は系 3.2 (3)の上界uβemin⁡=2−1075u\beta^{e_{\min}}=2^{-1075}以下であり、相対誤差は11である。続く除算の計算値はfl⁡(0/d)=0\operatorname{fl}(0/d)=0であり、厳密な値(d⋅d)/d=d(d\cdot d)/d=dとは異なる。x=3⋅2−1023x=3\cdot2^{-1023}、y=2−1022y=2^{-1022}は正規化数であり、x−y=2−1023x-y=2^{-1023}はアンダーフローの範囲にある。系 3.2 (4)によりfl⁡(x−y)=2−1023\operatorname{fl}(x-y)=2^{-1023}である。

6 演習

問題 6.1.F=F(β,p,emin⁡,emax⁡)F=F(\beta,p,e_{\min},e_{\max})を浮動小数点数系、uuをその単位丸め誤差、fl⁡\operatorname{fl}をFFの最近接丸めとする。正規範囲の任意の実数zzに対して∣fl⁡(z)−z∣≤u∣z∣/(1+u)|\operatorname{fl}(z)-z|\le u|z|/(1+u)が成り立つことを示せ。また、整数eeがemin⁡≤e≤emax⁡e_{\min}\le e\le e_{\max}とβe(1+u)≤Nmax⁡\beta^e(1+u)\le N_{\max}を満たすならば、z=βe(1+u)z=\beta^e(1+u)で等号が成り立つことを示せ。

解答.

t:=∣z∣t:=|z|、e:=e(t)e:=e(t)、s:=ses:=s_eと置く。s/2=uβes/2=u\beta^eである。補題 1.2 (5)によりβe≤a≤t<a+s\beta^e\le a\le t<a+sを満たすa∈Fa\in Fがあり、a+s∈Fa+s\in Fであるかt=at=aである。d:=∣fl⁡(z)−z∣=min⁡y∈F∣y−t∣d:=|\operatorname{fl}(z)-z|=\min_{y\in F}|y-t|と置く。t=at=aならばd=0d=0である。a<t≤a+s/2a<t\le a+s/2ならば、d≤t−ad\le t-aであり、1−a/t1-a/tはttについて増加するので

dt≤1−at≤1−aa+s/2=s/2a+s/2≤s/2βe+s/2=u1+u\frac dt\le1-\frac at\le1-\frac{a}{a+s/2}=\frac{s/2}{a+s/2}\le\frac{s/2}{\beta^e+s/2}=\frac{u}{1+u}

である。t>a+s/2t>a+s/2ならば、t≠at\ne aであるからa+s∈Fa+s\in Fであり、d≤a+s−t<s/2d\le a+s-t<s/2かつt>a+s/2≥βe+s/2t>a+s/2\ge\beta^e+s/2であるから、d/t<(s/2)/(βe+s/2)=u/(1+u)d/t<(s/2)/(\beta^e+s/2)=u/(1+u)である。

z=βe(1+u)=βe+s/2z=\beta^e(1+u)=\beta^e+s/2とする。βe∈F\beta^e\in Fとの距離はs/2s/2である。βe<Nmax⁡\beta^e<N_{\max}であるから、補題 1.2 (4)によりβe\beta^eより大きいFFの元はβe+s\beta^e+s以上であり、zzとの距離はs/2s/2以上である。βe\beta^eより小さいFFの元とzzとの距離はs/2s/2より大きい。したがってd=s/2d=s/2であり、d/z=(s/2)/(βe+s/2)=u/(1+u)d/z=(s/2)/(\beta^e+s/2)=u/(1+u)である。▨

問題 6.2.補題 1.3の証明を完成させよ。

解答.

補題 1.3 (1)を示す。F=−FF=-Fであるからk≥0k\ge0としてよい。k=0k=0ならばkse=0∈Fks_e=0\in Fである。βp−1≤k≤βp−1\beta^{p-1}\le k\le\beta^p-1ならばkseks_eは正規化数である。k=βpk=\beta^pならばkse=βe+1ks_e=\beta^{e+1}であり、βe+1≤Nmax⁡<βemax⁡+1\beta^{e+1}\le N_{\max}<\beta^{e_{\max}+1}からe+1≤emax⁡e+1\le e_{\max}であるので、βe+1=βp−1se+1\beta^{e+1}=\beta^{p-1}s_{e+1}は正規化数である。1≤k≤βp−1−11\le k\le\beta^{p-1}-1とする。kβj≥βp−1k\beta^j\ge\beta^{p-1}を満たす最小の整数j≥0j\ge0をとるとj≥1j\ge1であり、kβj−1≤βp−1−1k\beta^{j-1}\le\beta^{p-1}-1からkβj≤βp−β≤βp−1k\beta^j\le\beta^p-\beta\le\beta^p-1である。e−j≥emin⁡e-j\ge e_{\min}ならばkse=(kβj)se−jks_e=(k\beta^j)s_{e-j}は指数e−je-jの正規化数である。e−j<emin⁡e-j<e_{\min}ならばi:=e−emin⁡i:=e-e_{\min}は0≤i<j0\le i<jを満たし、jjの最小性からkβi≤βp−1−1k\beta^i\le\beta^{p-1}-1であるので、kse=(kβi)semin⁡ks_e=(k\beta^i)s_{e_{\min}}は非正規数である。

補題 1.3 (2)を示す。補題 1.2 (3)によりx=σmsex=\sigma ms_eと書く。βp−1≤m≤βp−1\beta^{p-1}\le m\le\beta^p-1ならば∣x∣∈[βe,βe+1)|x|\in[\beta^e,\beta^{e+1})であるからe=e(∣x∣)e=e(|x|)である。e=emin⁡e=e_{\min}かつ1≤m≤βp−1−11\le m\le\beta^{p-1}-1ならば∣x∣<βemin⁡|x|<\beta^{e_{\min}}であるからe(∣x∣)=emin⁡=ee(|x|)=e_{\min}=eである。いずれの場合もx=(σm)se(∣x∣)x=(\sigma m)s_{e(|x|)}、1≤m≤βp−11\le m\le\beta^p-1である。emin⁡≤e′≤e(∣x∣)e_{\min}\le e'\le e(|x|)ならばse(∣x∣)=βe(∣x∣)−e′se′s_{e(|x|)}=\beta^{e(|x|)-e'}s_{e'}であるから、xxはse′s_{e'}の整数倍である。

補題 1.3 (3)を示す。t′<βemin⁡t'<\beta^{e_{\min}}ならばe(t)=e(t′)=emin⁡e(t)=e(t')=e_{\min}である。t<βemin⁡≤t′t<\beta^{e_{\min}}\le t'ならばe(t)=emin⁡≤e(t′)e(t)=e_{\min}\le e(t')である。βemin⁡≤t\beta^{e_{\min}}\le tならばβe(t)≤t≤t′<βe(t′)+1\beta^{e(t)}\le t\le t'<\beta^{e(t')+1}であるからe(t)<e(t′)+1e(t)<e(t')+1であり、e(t)≤e(t′)e(t)\le e(t')である。▨

前提記事