1 浮動小数点数系
定義 1.1.β≥2、p≥1、emin≤emaxを整数とし、整数eに対してse:=βe+1−pと置く。次の三つの集合の和集合F=F(β,p,emin,emax)を、基数β、仮数桁数p、指数範囲[emin,emax]の 浮動小数点数系 (floating-point number system) といい、Fの元を 浮動小数点数 (floating-point number) という。
- {0}。
- {σmse∣σ∈{1,−1}, e,m∈Z, emin≤e≤emax, βp−1≤m≤βp−1}。この集合の元を 正規化数 (normalized number) という。
- {σmsemin∣σ∈{1,−1}, m∈Z, 1≤m≤βp−1−1}。この集合の元を 非正規数 (subnormal number) という。p=1のとき、この集合は空である。
Nmax:=(βp−1)semax=βemax+1(1−β−p)と置く。βemin≤∣z∣≤Nmaxを満たす実数zの全体をFの 正規範囲 (normal range) という。実数zが∣z∣>Nmaxを満たすときzは オーバーフロー (overflow) の範囲にあるといい、0<∣z∣<βeminを満たすときzは アンダーフロー (underflow) の範囲にあるという。
補題 1.2.F=F(β,p,emin,emax)を浮動小数点数系とする。0≤t≤Nmaxを満たす実数tに対し、t<βeminのときe(t):=eminと置き、t≥βeminのときβe(t)≤t<βe(t)+1を満たす整数をe(t)と置く。
- emin≤e≤emaxを満たす整数eに対して、F∩[βe,βe+1)={mse∣m∈Z, βp−1≤m≤βp−1}が成り立つ。特にNmaxはFの最大元である。
- F∩[0,βemin)={msemin∣m∈Z, 0≤m≤βp−1−1}が成り立つ。
- Fの各元x=0に対して、x=σmse、σ∈{1,−1}、emin≤e≤emaxを満たし、さらにβp−1≤m≤βp−1であるかe=eminかつ1≤m≤βp−1−1であるような整数の組(σ,e,m)はただ一つ存在する。
- x∈Fが0≤x<Nmaxを満たすならば、xより大きいFの元のうち最小のものはx+se(x)である。
- 0≤t≤Nmaxを満たす実数tに対して、a≤t<a+se(t)を満たすa∈Fが存在し、a+se(t)∈Fであるかt=a=Nmaxである。t≥βeminならばa≥βe(t)である。
証明.0≤t≤Nmax<βemax+1ならばemin≤e(t)≤emaxである。βp−1≤m≤βp−1ならばβe=βp−1se≤mse≤(βp−1)se<βe+1であるから、正規化数σmseの絶対値は[βe,βe+1)に属する。これらの区間はeごとに交わらない。正の非正規数mseminはmsemin≤(βp−1−1)semin<βeminを満たす。したがってF∩[βe,βe+1)の元は指数eの正の正規化数であり、(1)の等式が成り立つ。Fの正の元は[0,βemin)か、あるemin≤e≤emaxに対する[βe,βe+1)に属するので、Fの最大元はF∩[βemax,βemax+1)の最大元(βp−1)semax=Nmaxである。正規化数の絶対値はβemin以上であるから、F∩[0,βemin)は0と正の非正規数からなり、(2)が成り立つ。
(3)を示す。σはxの符号である。∣x∣≥βeminならば、∣x∣は非正規数の絶対値ではなく、∣x∣∈[βe,βe+1)からe=e(∣x∣)、m=∣x∣/seが定まる。∣x∣<βeminならば、∣x∣は正規化数の絶対値ではないのでe=emin、m=∣x∣/seminである。
(4)を示す。x≥βeminとし、e:=e(x)と置く。(1)によりx=mse、βp−1≤m≤βp−1であり、(x,βe+1)に属するFの元はm<m′≤βp−1を満たすm′seである。m≤βp−2ならば、その最小元は(m+1)se=x+seである。m=βp−1ならば(x,βe+1)にFの元は無く、x<Nmaxであるからe<emaxであり、x+se=βe+1=βp−1se+1∈Fである。βe+1以上の元はx+se以上であるから、どちらの場合も最小元はx+seである。0≤x<βeminの場合は、(2)によりx=msemin、0≤m≤βp−1−1であり、(m+1)seminはm+1≤βp−1−1ならば非正規数、m+1=βp−1ならば正規化数βeminである。(2)により[0,βemin)に属するFの元はseminの整数倍であり、正規化数はβemin以上であるから、(x,(m+1)semin)にFの元は無く、最小元はx+seminである。
(5)を示す。a:=max{y∈F∣y≤t}と置く。0∈Fであるからaは存在する。t≥βeminならばβe(t)=βp−1se(t)∈Fかつβe(t)≤tであるからβe(t)≤a≤t<βe(t)+1であり、e(a)=e(t)である。t<βeminならば0≤a<βeminであり、e(a)=emin=e(t)である。a<Nmaxならば、(4)によりa+se(t)はaより大きい最小のFの元であり、aの最大性からa+se(t)>tである。a=NmaxならばNmax=a≤t≤Nmaxよりt=aである。▨
補題 1.3.F=F(β,p,emin,emax)を浮動小数点数系とし、0≤t≤Nmaxを満たす実数tに対してe(t)を補題 1.2の整数とする。
- 整数eがemin≤e≤emaxを満たし、整数kが∣k∣≤βpと∣kse∣≤Nmaxを満たすならば、kse∈Fである。
- x∈Fがx=0を満たすならば、1≤∣m∣≤βp−1を満たす整数mが存在してx=mse(∣x∣)が成り立つ。さらに、emin≤e≤e(∣x∣)を満たす任意の整数eについて、xはseの整数倍である。
- 0≤t≤t′≤Nmaxならばe(t)≤e(t′)である。
定義 1.4.F=F(β,p,emin,emax)を浮動小数点数系とする。
- u:=β1−p/2をFの 単位丸め誤差 (unit roundoff) という。
- emin≤0<emaxのとき、1=βp−1s0とNmax≥βemax>1はFの元である。1より大きいFの元のうち最小のものから1を引いた値ϵmachをFの 機械イプシロン (machine epsilon) という。
系 1.5.F=F(β,p,emin,emax)をemin≤0<emaxを満たす浮動小数点数系とする。Fの機械イプシロンϵmachと単位丸め誤差uはϵmach=β1−p=2uを満たす。
証明.e(1)=0かつ1<Nmaxであるから、補題 1.2 (4)により1より大きい最小のFの元は1+s0=1+β1−pである。▨
例 1.6.F=F(2,3,−2,2)とする。se=2e−2であり、s−2=1/16、s−1=1/8、s0=1/4、s1=1/2、s2=1である。補題 1.2 (1)と補題 1.2 (2)により、Fの正の元は次の23個であり、∣F∣=2⋅23+1=47である。
- 正の非正規数は1/16, 1/8, 3/16である。
- [1/4,1/2)に属する元は1/4, 5/16, 3/8, 7/16である。
- [1/2,1)に属する元は1/2, 5/8, 3/4, 7/8である。
- [1,2)に属する元は1, 5/4, 3/2, 7/4である。
- [2,4)に属する元は2, 5/2, 3, 7/2である。
- [4,8)に属する元は4, 5, 6, 7である。
Nmax=7、正規範囲の下端はβemin=1/4、単位丸め誤差はu=1/8、機械イプシロンは1/4である。正規化数mseは二進3桁の仮数による指数表示(m/4)⋅2eに対応し、たとえば5/4=5⋅2−2=(1.01)2×20である。隣接する元の間隔は[0,1/2)で1/16であり、e≥−1の帯[2e,2e+1)でseである。帯[2e,2e+1)の元xに対する間隔の比は1/8<se/x≤1/4を満たし、非正規数x=1/16ではs−2/x=1である。
例 1.7. IEEE 754 の binary64 形式の有限数の全体はF(2,53,−1022,1023)である。Nmax=(253−1)2971=(2−2−52)21023≈1.7976931348623157×10308、正規範囲の下端は2−1022≈2.2250738585072014×10−308、最小の正の非正規数はs−1022=2−1074≈4.94×10−324である。系 1.5によりϵmach=2−52≈2.220446049250313×10−16、u=2−53≈1.1102230246251565×10−16である。
CPython の sys.float_info は max・min・epsilon にそれぞれNmax・2−1022・2−52を与える。同じ sys.float_info の min_exp=-1021 と max_exp=1024 は仮数を[1/2,1)に置く C の規約による指数であり、emin=−1022、emax=1023とはそれぞれ1だけ異なる。
2 最近接丸め
定義 2.1.F=F(β,p,emin,emax)を浮動小数点数系とし、zを∣z∣≤Nmaxを満たす実数とする。x∈Fが任意のy∈Fに対して∣x−z∣≤∣y−z∣を満たすとき、xをzの 最近接点 (nearest point) という。Fは空でない有限集合であるから、zの最近接点は存在する。写像fl:[−Nmax,Nmax]→Fであって、各zに対してfl(z)がzの最近接点であるものを、Fの 最近接丸め (rounding to nearest) という。
定理 2.2.F=F(β,p,emin,emax)を浮動小数点数系、uをその単位丸め誤差、flをFの最近接丸めとし、zを∣z∣≤Nmaxを満たす実数とする。
- z∈Fならばfl(z)=zである。特にfl(0)=0である。
- zが正規範囲にあるならば、∣δ∣≤uを満たす実数δが存在してfl(z)=z(1+δ)が成り立つ。
- ∣z∣<βeminならば∣fl(z)−z∣≤uβemin=semin/2が成り立つ。
証明.z∈Fならば、zとの距離が0であるFの元はzだけであるから、(1)が成り立つ。
t:=∣z∣と置く。F=−Fであるから∣fl(z)−z∣=miny∈F∣y−z∣=miny∈F∣y−t∣である。補題 1.2 (5)により、a≤t<a+se(t)を満たすa∈Fがあり、a+se(t)∈Fであるかt=aである。a+se(t)∈Fならばminy∈F∣y−t∣≤min{t−a, a+se(t)−t}≤se(t)/2であり、t=aならばminy∈F∣y−t∣=0である。いずれの場合も
∣fl(z)−z∣≤2se(t)=uβe(t)が成り立つ。zが正規範囲にあるならばβe(t)≤t=∣z∣であるから∣fl(z)−z∣≤u∣z∣であり、δ:=(fl(z)−z)/zと置けば(2)が成り立つ。∣z∣<βeminならばe(t)=eminであり、(3)が成り立つ。▨
補題 2.3.F=F(β,p,emin,emax)を浮動小数点数系とする。x∈Fに対し、x=0のときm(x):=0と置き、x=0のとき補題 1.2 (3)の整数mをm(x)と置く。
- βが奇数であるかp≥2であるとする。∣z∣≤Nmaxを満たす実数zが二つの最近接点を持つならば、そのうちm(x)が偶数であるものxはちょうど一つである。
- βが偶数でp=1であり、整数eがemin≤e<emaxを満たすとする。z:=(β−1/2)βeの最近接点は(β−1)βeとβe+1の二つであり、どちらもm(x)は奇数である。
証明.(1)を示す。zの二つの最近接点をx<x′とする。z=(x+x′)/2であり、(x,x′)に属するy∈Fは∣y−z∣<∣x−z∣を満たすので、(x,x′)にFの元は無い。F=−Fかつm(−y)=m(y)であるから、zを−zに替えてz≥0としてよい。このときx′>0であり、0∈Fが(x,x′)に属さないのでx≥0である。x<x′≤Nmaxであるから、補題 1.2 (4)によりx′=x+se(x)である。x<βeminならば、補題 1.2 (2)によりx=msemin、m=m(x)≤βp−1−1であり、x′=(m+1)seminはm(x′)=m+1を満たす。x≥βeminかつm(x)≤βp−2ならば、補題 1.2 (1)によりm(x′)=m(x)+1である。これらの場合、m(x)とm(x′)は連続する整数であり、ちょうど一方が偶数である。残る場合はx≥βeminかつm(x)=βp−1であり、このときx′=βe(x)+1=βp−1se(x)+1からm(x′)=βp−1である。βが奇数ならばβp−1は偶数でβp−1は奇数である。βが偶数でp≥2ならばβp−1は奇数でβp−1は偶数である。
(2)を示す。p=1であるからse=βeであり、補題 1.2 (1)により(β−1)βe∈Fでm((β−1)βe)=β−1である。e+1≤emaxであるから、補題 1.2 (4)により(β−1)βeより大きい最小のFの元はβe+1=1⋅se+1であり、m(βe+1)=1である。zはこの隣接する二元の中点であるから、最近接点はこの二元である。βが偶数であるからβ−1は奇数である。▨
定義 2.4.F=F(β,p,emin,emax)を、βが奇数であるかp≥2である浮動小数点数系とし、m(x)を補題 2.3の整数とする。Fの最近接丸めflであって、二つの最近接点を持つ各zに対してm(fl(z))が偶数であるものを、Fの 最近接偶数丸め (round to nearest, ties to even) という。補題 2.3 (1)により、最近接偶数丸めはただ一つ存在する。
例 2.5.F=F(2,3,−2,2)とし、flをFの最近接偶数丸めとする。u=1/8、βemin=1/4、semin=1/16である。9/8の最近接点は1=4s0と5/4=5s0であり、fl(9/8)=1、δ=−1/9である。11/8の最近接点は5/4=5s0と3/2=6s0であり、fl(11/8)=3/2、δ=1/11である。どちらも∣δ∣≤uを満たす。15/64はアンダーフローの範囲にあり、最近接点は1/4だけであって、∣fl(15/64)−15/64∣=1/64である。3/32の最近接点は1/16=1⋅s−2と1/8=2s−2であり、fl(3/32)=1/8である。絶対誤差は1/32=uβeminであり、定理 2.2 (3)の評価は等号で成り立つ。相対誤差は1/3>uである。1/32の最近接点は0と1/16であり、m(0)=0であるからfl(1/32)=0である。絶対誤差は1/32=uβemin、相対誤差は1である。
3 四則演算のモデル
定義 3.1.F=F(β,p,emin,emax)を浮動小数点数系、flをFの最近接丸めとし、∘∈{+,−,×,/}とする。x,y∈Fが、∘=/のときy=0を満たし、∣x∘y∣≤Nmaxを満たすとする。実数x∘yを演算の厳密な結果といい、fl(x∘y)を 正しく丸めた演算 (correctly rounded operation) の結果という。
系 3.2.F=F(β,p,emin,emax)を浮動小数点数系、uをその単位丸め誤差、flをFの最近接丸めとし、∘∈{+,−,×,/}とする。x,y∈Fが、∘=/のときy=0を満たし、∣x∘y∣≤Nmaxを満たすとする。
- x∘y∈Fならばfl(x∘y)=x∘yである。特にx∘y=0ならばfl(x∘y)=0である。
- x∘yが正規範囲にあるならば、∣δ∣≤uを満たす実数δが存在してfl(x∘y)=(x∘y)(1+δ)が成り立つ。
- 0<∣x∘y∣<βeminならば∣fl(x∘y)−x∘y∣≤uβeminが成り立つ。
- ∘∈{+,−}かつ∣x∘y∣<βeminならばfl(x∘y)=x∘yである。
証明.(1)、(2)、(3)は、定理 2.2をz=x∘yに適用したものである。(4)を示す。x±y=0ならば、(1)によりfl(x±y)=x±yである。x±y=0とする。xとyのそれぞれは、0であるか、補題 1.3 (2)をe=eminとして適用してseminの整数倍である。したがってx±y=kseminを満たす整数kがあり、∣x±y∣<βemin=βp−1seminから∣k∣<βp−1≤βpである。∣ksemin∣=∣x±y∣≤Nmaxであるから、補題 1.3 (1)によりx±y∈Fであり、(1)によりfl(x±y)=x±yである。▨
系 3.3.F=F(β,p,emin,emax)を浮動小数点数系、uをその単位丸め誤差、flをFの最近接丸めとする。y,y′∈Fが∣y+y′∣≤Nmaxを満たすならば、∣δ∣≤uを満たす実数δが存在してfl(y+y′)=(y+y′)(1+δ)が成り立つ。
証明.y+y′が正規範囲にあるならば、系 3.2 (2)により主張が成り立つ。∣y+y′∣<βeminならば、系 3.2 (4)によりfl(y+y′)=y+y′であり、δ:=0とすればよい。▨
4 丸め誤差の積
補題 4.1.u≥0を実数、k≥1をku<1を満たす整数とし、γk:=ku/(1−ku)と置く。実数δ1,…,δkが∣δi∣≤uを満たし、ε1,…,εk∈{1,−1}とする。このとき
i=1∏k(1+δi)εi=1+θk,∣θk∣≤γkを満たす実数θkが存在する。
証明.k≥1かつku<1であるから0≤u<1である。各iについて1−u≤1+δi≤1+uであり、(1+u)(1−u)=1−u2≤1から1+u≤(1−u)−1であるので、1−u≤1+δi≤(1−u)−1が成り立つ。1+δi≥1−u>0であるから、逆数をとって1−u≤(1+δi)−1≤(1−u)−1も成り立つ。したがってP:=∏i=1k(1+δi)εiは(1−u)k≤P≤(1−u)−kを満たす。整数j≥0に対して(1−u)j≥1−juが成り立つ。実際、j=0では等号であり、(1−u)j≥1−juの両辺に1−u≥0を掛けると
(1−u)j+1≥(1−ju)(1−u)=1−(j+1)u+ju2≥1−(j+1)uが得られる。j=kとして(1−u)k≥1−ku>0であるから、θk:=P−1は
−ku≤θk≤1−ku1−1=γkを満たす。0<1−ku≤1からku≤γkであり、∣θk∣≤γkが成り立つ。▨
例 4.2.Fを浮動小数点数系、uをその単位丸め誤差、flをFの最近接丸めとし、n≥2を(n−1)u<1を満たす整数、x1,…,xn∈Fとする。p^1:=x1、p^j:=fl(p^j−1xj)(j=2,…,n)と置き、各jについて厳密な積p^j−1xjが正規範囲にあると仮定する。系 3.2 (2)によりp^j=p^j−1xj(1+δj)、∣δj∣≤uであり、jに関する帰納法でp^n=x1⋯xn∏j=2n(1+δj)が成り立つ。補題 4.1をk=n−1、εj=1に適用してp^n=x1⋯xn(1+θn−1)、∣θn−1∣≤γn−1を得る。εj=−1に適用するとx1⋯xn=p^n∏j=2n(1+δj)−1=p^n(1+θn−1′)、∣θn−1′∣≤γn−1を得る。F=F(2,3,−2,2)、flを最近接偶数丸め、n=4、x1=⋯=x4=5/4とすると、3u=3/8<1、γ3=3/5である。p^2=fl(25/16)=3/2、p^3=fl(15/8)=2(最近接点7/4=7s0と2=4s1のうちmが偶数である方)、p^4=fl(5/2)=5/2であり、厳密な積25/16、15/8、5/2はいずれも正規範囲[1/4,7]に属する。厳密な値は(5/4)4=625/256であり、θ3=(5/2)/(625/256)−1=3/125、θ3′=(625/256)/(5/2)−1=−3/128である。
5 桁落ち・情報落ち・オーバーフロー・アンダーフロー
定義 5.1.β≥2とk≥1を整数とし、x,yを実数とする。xy>0、x=y、∣x−y∣≤β−kmax{∣x∣,∣y∣}が成り立つとき、差x−yで基数βのk桁の 桁落ち (cancellation) が起きるという。
命題 5.2.x,yをx=0、y=0、x=yを満たす実数とし、ρ≥0とする。
- ∣x^−x∣≤ρ∣x∣と∣y^−y∣≤ρ∣y∣を満たす任意の実数x^,y^に対して∣(x^−y^)−(x−y)∣≤ρ(∣x∣+∣y∣)が成り立つ。
- xy<0ならば∣x−y∣=∣x∣+∣y∣であり、∣x^−x∣≤ρ∣x∣と∣y^−y∣≤ρ∣y∣を満たす任意の実数x^,y^に対して∣(x^−y^)−(x−y)∣/∣x−y∣≤ρが成り立つ。
- 整数β≥2、k≥1について差x−yで基数βのk桁の桁落ちが起き、ρ>0であるとする。このときx^:=x(1+ρ)、y^:=y(1−ρ)は∣x^−x∣=ρ∣x∣、∣y^−y∣=ρ∣y∣と∣(x^−y^)−(x−y)∣/∣x−y∣=ρ(∣x∣+∣y∣)/∣x−y∣≥ρβkを満たす。
証明.(x^−y^)−(x−y)=(x^−x)−(y^−y)に三角不等式を適用して(1)を得る。xy<0ならばxと−yは同符号であるから∣x−y∣=∣x∣+∣−y∣=∣x∣+∣y∣である。(1)により∣(x^−y^)−(x−y)∣≤ρ(∣x∣+∣y∣)=ρ∣x−y∣であり、(2)が成り立つ。差x−yで基数βのk桁の桁落ちが起きるならばxy>0である。x^=x(1+ρ)、y^=y(1−ρ)に対して(x^−y^)−(x−y)=ρ(x+y)であり、x,yが同符号であるから∣x+y∣=∣x∣+∣y∣である。桁落ちの定義により∣x∣+∣y∣≥max{∣x∣,∣y∣}≥βk∣x−y∣であるから、(3)が成り立つ。▨
例 5.3.F=F(2,53,−1022,1023)、flを最近接偶数丸めとし、x=11/10、y=1とする。x^:=fl(11/10)=4953959590107546⋅2−52であり、x^−11/10=2−51/5、その相対誤差は2−50/11≈8.07×10−17である。y^:=fl(1)=1である。x^−y^=450359962737050⋅2−52=7205759403792800⋅2−56であり、252≤7205759403792800≤253−1であるから補題 1.2 (1)によりx^−y^∈Fである。系 3.2 (1)によりfl(x^−y^)=x^−y^である。(x^−y^)−1/10=2−51/5であるから、差の相対誤差は2−50≈8.88×10−16=8uであり、入力の相対誤差の11倍である。max{∣x∣,∣y∣}/∣x−y∣=(11/10)/(1/10)=11であり、23≤11<24であるから、差x−yで基数2の3桁の桁落ちが起き、4桁の桁落ちは起きない。この値は命題 5.2 (1)の上界ρ(∣x∣+∣y∣)/∣x−y∣=21ρ(ρ=2−50/11)以下である。CPython で 1.1 - 1 を計算すると 0.10000000000000009 が表示される。
定義 5.5.Fを浮動小数点数系、flをFの最近接丸めとし、x,y∈Fがy=0と∣x+y∣≤Nmaxを満たすとする。fl(x+y)=xが成り立つとき、加算x+yで 情報落ち (absorption) が起きるという。
命題 5.6.F=F(β,p,emin,emax)を浮動小数点数系、flをFの最近接丸めとする。x∈Fが∣x∣≥βeminを満たし、e:=e(∣x∣)を補題 1.2の整数とする。実数yが∣x+y∣≤Nmax、∣y∣<se/2を満たし、さらに∣x∣>βeであるかxy≥0であるならば、fl(x+y)=xが成り立つ。
証明.t:=x+y、s:=seと置く。F=−Fであり、xがtのただ一つの最近接点であるという性質は(x,y)を(−x,−y)に替えても保たれるので、x>0としてよい。∣t−x∣=∣y∣<s/2である。x′∈F、x′=xとする。x′>xならばx<Nmaxであり、補題 1.2 (4)によりx′≥x+sである。y≥0ならば∣x′−t∣≥x+s−t=s−∣y∣>s/2>∣y∣であり、y<0ならば∣x′−t∣>x−t=∣y∣である。x′<xかつy≥0ならば∣x′−t∣>t−x=∣y∣である。x′<xかつy<0ならば、仮定からx>βeであり、補題 1.2 (1)によりx−s∈Fかつ(x−s,x)にFの元は無いのでx′≤x−sである。したがって∣x′−t∣≥t−(x−s)=s−∣y∣>∣y∣である。いずれの場合も∣x′−t∣>∣x−t∣であるから、xはtのただ一つの最近接点であり、fl(x+y)=xである。▨
例 5.7.F=F(2,53,−1022,1023)、x=1とする。e(1)=0、s0=2−52である。y=2−54は∣y∣<2−53とxy>0を満たすので、命題 5.6により任意の最近接丸めでfl(1+2−54)=1であり、加算1+yで情報落ちが起きる。このときfl(fl(1+y)−1)=0=yである。一方1=(1+2−54)(1+δ)のδ=−2−54/(1+2−54)は∣δ∣<uを満たし、系 3.2 (2)の評価は和1+yに対して成り立つ。y=2−53=s0/2では1+yの最近接点は1と1+2−52の二つである。m(1)=252、m(1+2−52)=252+1であるから、最近接偶数丸めではfl(1+2−53)=1となり、他方の最近接点を選ぶ最近接丸めでは情報落ちは起きない。y=2−53+2−105=(252+1)s−53∈Fは∣y∣>s0/2を満たし、1+yのただ一つの最近接点は1+2−52である。y=−3⋅2−55∈Fは∣y∣<s0/2を満たすが、x=β0かつxy<0である。1の前のFの元は1−2−53=(253−1)s−1であり、1−3⋅2−55との距離は2−55、1との距離は3⋅2−55であるから、fl(1+y)=1−2−53=1である。
例 5.8.F=F(2,53,−1022,1023)、flを最近接偶数丸めとし、c:=fl(10308)とする。c≥10308(1−u)>Nmax/2であるから、c+cはオーバーフローの範囲にあり、系 3.2の仮定は(c+c)/2の最初の演算で満たされない。
binary64 の演算はこの加算の結果を+∞とし、(c+c)/2の計算値も+∞である。厳密な値(c+c)/2=cは正規範囲にある。c=ms1023と書くとc/2=ms1022∈Fであるから、系 3.2 (1)によりfl(c/2)=c/2であり、c/2+c/2=c∈Fからfl(c/2+c/2)=cである。計算式c/2+c/2のすべての演算の厳密な結果は正規範囲にある。
例 5.9.F=F(2,53,−1022,1023)、flを最近接偶数丸めとし、d:=fl(10−200)とする。dは正規範囲にあり、d2<2−1075=s−1022/2である。Fの正の最小元はs−1022であるから、d2のただ一つの最近接点は0であり、fl(d⋅d)=0である。絶対誤差d2は系 3.2 (3)の上界uβemin=2−1075以下であり、相対誤差は1である。続く除算の計算値はfl(0/d)=0であり、厳密な値(d⋅d)/d=dとは異なる。x=3⋅2−1023、y=2−1022は正規化数であり、x−y=2−1023はアンダーフローの範囲にある。系 3.2 (4)によりfl(x−y)=2−1023である。
6 演習
問題 6.1.F=F(β,p,emin,emax)を浮動小数点数系、uをその単位丸め誤差、flをFの最近接丸めとする。正規範囲の任意の実数zに対して∣fl(z)−z∣≤u∣z∣/(1+u)が成り立つことを示せ。また、整数eがemin≤e≤emaxとβe(1+u)≤Nmaxを満たすならば、z=βe(1+u)で等号が成り立つことを示せ。
解答.
t:=∣z∣、e:=e(t)、s:=seと置く。s/2=uβeである。補題 1.2 (5)によりβe≤a≤t<a+sを満たすa∈Fがあり、a+s∈Fであるかt=aである。d:=∣fl(z)−z∣=miny∈F∣y−t∣と置く。t=aならばd=0である。a<t≤a+s/2ならば、d≤t−aであり、1−a/tはtについて増加するので
td≤1−ta≤1−a+s/2a=a+s/2s/2≤βe+s/2s/2=1+uuである。t>a+s/2ならば、t=aであるからa+s∈Fであり、d≤a+s−t<s/2かつt>a+s/2≥βe+s/2であるから、d/t<(s/2)/(βe+s/2)=u/(1+u)である。
z=βe(1+u)=βe+s/2とする。βe∈Fとの距離はs/2である。βe<Nmaxであるから、補題 1.2 (4)によりβeより大きいFの元はβe+s以上であり、zとの距離はs/2以上である。βeより小さいFの元とzとの距離はs/2より大きい。したがってd=s/2であり、d/z=(s/2)/(βe+s/2)=u/(1+u)である。▨
解答.
補題 1.3 (1)を示す。F=−Fであるからk≥0としてよい。k=0ならばkse=0∈Fである。βp−1≤k≤βp−1ならばkseは正規化数である。k=βpならばkse=βe+1であり、βe+1≤Nmax<βemax+1からe+1≤emaxであるので、βe+1=βp−1se+1は正規化数である。1≤k≤βp−1−1とする。kβj≥βp−1を満たす最小の整数j≥0をとるとj≥1であり、kβj−1≤βp−1−1からkβj≤βp−β≤βp−1である。e−j≥eminならばkse=(kβj)se−jは指数e−jの正規化数である。e−j<eminならばi:=e−eminは0≤i<jを満たし、jの最小性からkβi≤βp−1−1であるので、kse=(kβi)seminは非正規数である。
補題 1.3 (2)を示す。補題 1.2 (3)によりx=σmseと書く。βp−1≤m≤βp−1ならば∣x∣∈[βe,βe+1)であるからe=e(∣x∣)である。e=eminかつ1≤m≤βp−1−1ならば∣x∣<βeminであるからe(∣x∣)=emin=eである。いずれの場合もx=(σm)se(∣x∣)、1≤m≤βp−1である。emin≤e′≤e(∣x∣)ならばse(∣x∣)=βe(∣x∣)−e′se′であるから、xはse′の整数倍である。
補題 1.3 (3)を示す。t′<βeminならばe(t)=e(t′)=eminである。t<βemin≤t′ならばe(t)=emin≤e(t′)である。βemin≤tならばβe(t)≤t≤t′<βe(t′)+1であるからe(t)<e(t′)+1であり、e(t)≤e(t′)である。▨