1 向きと行列式
定義 1.1 (向き). 点z∈R2の座標をz=(zx,zy)と書き、z,w∈R2に対して、第1列がz、第2列がwである2次正方行列の行列式をdet(z,w)と書く。a,b,c∈R2に対して
D(a,b,c):=det(b−a, c−a)と置く。§D3.4 式 (4.2.1)をn=2として適用すると
D(a,b,c)=(bx−ax)(cy−ay)−(by−ay)(cx−ax)である。符号sgnD(a,b,c)∈{1,0,−1}を三つ組(a,b,c)の 向き (orientation) という。三点a,b,c∈R2が 共線 (collinear) であるとは、q∈R2とv∈R2∖{0}が存在して、a,b,cがいずれも直線{q+τv∣τ∈R}に属することをいう。
補題 1.2.a,b,c,d∈R2、λ∈Rとする。
- D(a,b,c)=det(a,b)+det(b,c)+det(c,a)である。特にD(b,c,a)=D(a,b,c)、D(b,a,c)=−D(a,b,c)であり、D(a,b,a)=D(a,b,b)=0である。
- D(a,b,(1−λ)c+λd)=(1−λ)D(a,b,c)+λD(a,b,d)が成り立つ。
- a=bならば、D(a,b,c)=0であることと、あるt∈Rに対してc=a+t(b−a)であることは同値である。また、D(a,b,c)=0であることとa,b,cが共線であることは同値である。
証明.§D3.4 系 6.2により行列式は各列について線形であるから
D(a,b,c)=det(b,c)−det(b,a)−det(a,c)+det(a,a)である。同じ系により、二つの列が等しい行列式は0であり、二つの列を入れ替えると符号が変わるので、det(a,a)=0、−det(b,a)=det(a,b)、−det(a,c)=det(c,a)であり、(1)の等式が成り立つ。その右辺は(a,b,c)を(b,c,a)に替えても変わらず、(b,a,c)に替えるとdet(b,a)+det(a,c)+det(c,b)=−(det(a,b)+det(c,a)+det(b,c))となる。右辺でc=aとするとdet(a,b)+det(b,a)+det(a,a)=0であり、c=bとするとdet(a,b)+det(b,b)+det(b,a)=0である。
(1−λ)c+λd−a=(1−λ)(c−a)+λ(d−a)であるから、§D3.4 系 6.2の第2列についての線形性により(2)が成り立つ。
(3)を示す。a=bとし、v:=b−a、w:=c−aと置く。w=tvならば、第2列についての線形性と二つの列が等しい行列式が0であることによりD(a,b,c)=tdet(v,v)=0である。逆にD(a,b,c)=vxwy−vywx=0とする。vx=0ならば、t:=wx/vxと置くとwx=tvxかつwy=vywx/vx=tvyである。vx=0ならばvy=0であり、t:=wy/vyと置くと、vywx=vxwy=0からwx=0=tvxであり、wy=tvyである。いずれの場合もc=a+tvである。
a=bならば、(1)によりD(a,a,c)=D(a,c,a)=0である。さらにc=aのときv:=c−a、c=aのときv:=(1,0)と置くと、a,b,cは直線{a+τv∣τ∈R}に属するので共線である。a=bかつD(a,b,c)=0ならば、前段によりcは直線{a+τ(b−a)∣τ∈R}に属し、aとbもτ=0,1としてこの直線に属するので、a,b,cは共線である。a=bであり、a,b,cが直線{q+τv∣τ∈R}に属するとし、a=q+tav、b=q+tbv、c=q+tcvと書く。a=bからta=tbであり、c−a=tb−tatc−ta(b−a)であるから、前段によりD(a,b,c)=0である。▨
2 丸めによる誤判定
定義 2.1.Fを浮動小数点数系、flをFの最近接丸めとし、a,b,c∈F2とする。
d1:=fl(bx−ax),d2:=fl(cy−ay),d3:=fl(by−ay),d4:=fl(cx−ax),q1:=fl(d1d2),q2:=fl(d3d4)と順に置き、D(a,b,c):=fl(q1−q2)と置く。D(a,b,c)は、七つの演算の厳密な結果bx−ax、cy−ay、by−ay、cx−ax、d1d2、d3d4、q1−q2の絶対値がいずれもNmax以下であるときに定まる。D(a,b,c)をD(a,b,c)の 浮動小数点評価 (floating-point evaluation) という。
例 2.2.F:=F(2,53,−1022,1023)とし、flをFの最近接偶数丸めとする。n:=227、a:=(0,0)、b:=(n,n−1)、c:=(n+1,n)と置くと
D(a,b,c)=n⋅n−(n−1)(n+1)=1であるが、D(a,b,c)=0であり、D(a,b,c)の符号は(a,b,c)の向きと一致しない。
s52=20=1であるから、§E20.1 補題 1.3 (1)をe=52として適用すると、絶対値が253以下の整数はFに属する。したがってa,b,cの座標と四つの差bx−ax=n、cy−ay=n、by−ay=n−1、cx−ax=n+1はFに属し、§E20.1 系 3.2 (1)によりd1=d2=n、d3=n−1、d4=n+1である。積n⋅n=254=252s54はFに属するので、§E20.1 系 3.2 (1)によりq1=254である。
積d3d4=254−1について、s53=2であり、§E20.1 補題 1.2 (1)によりF∩[253,254)={2m∣m∈Z, 252≤m≤253−1}である。したがって254−2=(253−1)s53はFに属し、奇数254−1はFに属さない。§E20.1 補題 1.2 (4)により254−2より大きいFの元のうち最小のものは254−2+s53=254である。ゆえにFの各元yはy≤254−2またはy≥254を満たし、254−1の最近接点は、距離がともに1である254−2と254の二つである。§E20.1 補題 2.3の整数についてm(254−2)=253−1は奇数、m(254)=252は偶数であるから、§E20.1 定義 2.4によりq2=fl(254−1)=254である。
最後の減算の厳密な結果はq1−q2=0であり、§E20.1 系 3.2 (1)によりD(a,b,c)=0である。七つの演算の厳密な結果の絶対値は254以下であるからD(a,b,c)は定まる。
3 整数化と区間フィルタ
命題 3.1.F=F(β,p,emin,emax)を浮動小数点数系とし、s:=semin=βemin+1−pと置く。
- 各x∈Fに対して、x=ksを満たす整数kがただ一つ存在し、∣k∣≤Nmax/sである。
- a,b,c∈F2の各座標を(1)の整数によってa=sA、b=sB、c=sC(A,B,C∈Z2)と書くと、D(a,b,c)=s2D(A,B,C)であり、D(A,B,C)は整数であって、sgnD(a,b,c)=sgnD(A,B,C)が成り立つ。
証明.x∈Fとする。x=0ならばx=0⋅sである。x=0とする。§E20.1 補題 1.2の整数e(∣x∣)はemin以上であるから、§E20.1 補題 1.3 (2)をe=eminとして適用すると、xはsの整数倍である。s>0であるからk=x/sは一意である。§E20.1 補題 1.2 (1)によりNmaxはFの最大元であり、F=−Fであるから∣x∣≤Nmaxであり、∣k∣≤Nmax/sである。
§D3.4 系 6.2の各列についての線形性により
D(a,b,c)=det(s(B−A), s(C−A))=s2det(B−A, C−A)=s2D(A,B,C)である。D(A,B,C)は定義 1.1の展開式により整数の差と積で表されるので整数であり、s2>0であるからD(a,b,c)とD(A,B,C)の符号は一致する。▨
系 3.2. 6変数の式(§E20.36 定義 4.1 (1))
E:=(ξ3−ξ1)⋅(ξ6−ξ2)−(ξ4−ξ2)⋅(ξ5−ξ1)の定める関数はR6全体で定義され、fE(ξ)=D((ξ1,ξ2),(ξ3,ξ4),(ξ5,ξ6))を満たす。XをR6の箱とするとE(X)は定まる。Y:=E(X)とするか、ある浮動小数点数系FについてX⊂[−Nmax,Nmax]6かつEF(X)が定まるときにY:=EF(X)とする。infY>0ならば任意のξ∈Xに対してfE(ξ)>0であり、supY<0ならば任意のξ∈Xに対してfE(ξ)<0である。
定義 3.3.F=F(β,p,emin,emax)を浮動小数点数系とし、s:=seminと置き、Eを系 3.2の式とする。a,b,c∈F2に対して、R6の箱
X:=[ax,ax]×[ay,ay]×[bx,bx]×[by,by]×[cx,cx]×[cy,cy]は[−Nmax,Nmax]6に含まれる。次の手順を(a,b,c)の フィルタ付き向き判定 (filtered orientation test) という。
- 外向き丸めの自然区間拡張EF(X)(§E20.36 定義 4.1 (4))を計算する。EF(X)が定まってinfEF(X)>0ならば1を返し、EF(X)が定まってsupEF(X)<0ならば−1を返す。それ以外の場合は手順(2)へ進む。
- a,b,cの各座標xを整数x/s(命題 3.1 (1))に替えた点をA,B,C∈Z2とし、整数D(A,B,C)を計算してsgnD(A,B,C)を返す。
定理 3.4.Fを浮動小数点数系とし、a,b,c∈F2とする。
- (a,b,c)のフィルタ付き向き判定は、有理数の有限回の四則演算と大小比較の後に終了し、sgnD(a,b,c)を返す。
- D(a,b,c)=0ならば、手順定義 3.3 (1)は値を返さず、手順定義 3.3 (2)が0を返す。
証明.ξ:=(ax,ay,bx,by,cx,cy)と置くとX={ξ}であり、系 3.2によりfE(ξ)=D(a,b,c)である。Fの元は整数とβの整数冪の積であるから有理数である。
手順定義 3.3 (1)において、変数ξiに対する値outF([ξi,ξi])は、端点がFに属するので§E20.36 定理 3.3 (1)により[ξi,ξi]に等しい。Eの七つの演算のそれぞれについて、区間Y1,Y2に対するY1∘Y2の端点は§E20.36 定理 2.3 (1)によりY1,Y2の端点の高々四つの和・差・積の最小値と最大値である。Y1∘Y2⊂[−Nmax,Nmax]であるかは端点と±Nmaxの比較で定まり、fl↓(z)とfl↑(z)は有限集合Fの各元とzの比較で定まる。ここに現れる値はすべて有理数であるから、手順定義 3.3 (1)は有理数の有限回の四則演算と大小比較の後に、EF(X)を得るかEF(X)が定まらないことを知って終了する。EF(X)が定まるならば、系 3.2をX={ξ}とY=EF(X)に適用すると、infEF(X)>0ならばD(a,b,c)>0であり、supEF(X)<0ならばD(a,b,c)<0である。したがって手順定義 3.3 (1)が値を返すならば、その値はsgnD(a,b,c)である。
手順定義 3.3 (2)において、命題 3.1 (1)により各座標xについてx/sは整数であり、D(A,B,C)は整数の四回の減算、二回の乗算、一回の減算で得られる。命題 3.1 (2)によりsgnD(A,B,C)=sgnD(a,b,c)である。これで(1)は示された。
D(a,b,c)=0とする。EF(X)が定まるならば、§E20.36 定理 4.2 (3)により0=fE(ξ)∈EF(X)であり、infEF(X)≤0≤supEF(X)である。したがって手順定義 3.3 (1)は値を返さず、(1)により手順定義 3.3 (2)はsgn0=0を返す。▨
例 3.5.F:=F(2,53,−1022,1023)とする。
- a:=(−Nmax,0)、b:=(Nmax,0)、c:=(0,1)とすると、D(a,b,c)=2Nmax⋅1−0⋅Nmax=2Nmax>0である。部分式ξ3−ξ1の区間演算の結果[Nmax,Nmax]−[−Nmax,−Nmax]=[2Nmax,2Nmax]は[−Nmax,Nmax]に含まれないので、外向き丸めの区間演算[Nmax,Nmax]−F[−Nmax,−Nmax]は定まらず、EF(X)は定まらない。定理 3.4 (1)により手順定義 3.3 (2)は1を返す。差bx−axの厳密な結果の絶対値がNmaxを超えるので、浮動小数点評価D(a,b,c)も定まらない。
- s:=s−1022=2−1074、a:=(0,0)、b:=(s,0)、c:=(0,s)とすると、D(a,b,c)=s2=2−2148>0である。§E20.1 補題 1.2 (2)によりsはFの正の元のうち最小のものであり、0<s2<sであるからfl↓(s2)=0、fl↑(s2)=sである。四つの差の区間は[s,s]、[s,s]、[0,0]、[0,0]であり、積の区間はoutF([s2,s2])=[0,s]と[0,0]であり、EF(X)=outF([0,s])=[0,s]である。infEF(X)=0であるから手順定義 3.3 (2)へ進み、A=(0,0)、B=(1,0)、C=(0,1)に対するD(A,B,C)=1から1を返す。一方、s2<s/2であるからs2の最近接点は0だけであり、任意の最近接丸めflについてq1=fl(s2)=0、q2=0、D(a,b,c)=0である。積s2はアンダーフローの範囲にあるので§E20.1 系 3.2 (2)は適用されず、§E20.1 系 3.2 (3)の評価∣fl(s2)−s2∣≤s/2はfl(s2)=0を排除しない。
4 閉線分の交差
定義 4.1.a,b∈R2に対して、[a,b]:={(1−t)a+tb∣t∈[0,1]}をa,bを端点とする 閉線分 (closed segment) という。a=bのとき[a,b]={a}であり、これを 点線分 (point segment) という。
定理 4.2.a,b,c,d∈R2とする。次の三条件がすべて成り立つことは、[a,b]∩[c,d]=∅であるための必要十分条件である。
- j∈{x,y}のそれぞれについて、閉区間[min{aj,bj},max{aj,bj}]と[min{cj,dj},max{cj,dj}]が交わる。
- D(a,b,c)D(a,b,d)≤0である。
- D(c,d,a)D(c,d,b)≤0である。
証明. 必要性を示す。p∈[a,b]∩[c,d]をとり、t,s∈[0,1]によってp=(1−t)a+tb=(1−s)c+sdと書く。j∈{x,y}について、pj=(1−t)aj+tbjはmin{aj,bj}以上max{aj,bj}以下であり、pj=(1−s)cj+sdjはmin{cj,dj}以上max{cj,dj}以下であるから、条件 (a)が成り立つ。補題 1.2 (2)と補題 1.2 (1)により
0=(1−t)D(a,b,a)+tD(a,b,b)=D(a,b,p)=(1−s)D(a,b,c)+sD(a,b,d)である。1−sとsは非負で和が1であるから、D(a,b,c)とD(a,b,d)がともに正ならば右辺は正であり、ともに負ならば右辺は負である。いずれも左辺が0であることと両立しないので、条件 (b)が成り立つ。この議論はp∈[a,b]∩[c,d]だけを用いるので、(a,b)と(c,d)を入れ替えて適用すると条件 (c)を得る。
十分性を示す。三条件が成り立つとし、α:=D(a,b,c)、β:=D(a,b,d)、γ:=D(c,d,a)、δ:=D(c,d,b)と置く。実数μ,νがμν≤0と(μ,ν)=(0,0)を満たすならば、μ=νからμ2≤0すなわちμ=ν=0が従うのでμ=νであり、μ(μ−ν)=μ2−μν≥0と(μ−ν)2−μ(μ−ν)=ν2−μν≥0から0≤μ/(μ−ν)≤1である。三条件と結論は(a,b)と(c,d)の入れ替えで保たれ、この入れ替えは(α,β)と(γ,δ)を入れ替えるので、(α,β)=(0,0)の場合とα=β=γ=δ=0の場合を示せば足りる。
(α,β)=(0,0)とする。前段によりα=βかつs:=α/(α−β)∈[0,1]であり、p:=(1−s)c+sdは[c,d]に属する。補題 1.2 (2)によりD(a,b,p)=(1−s)α+sβ=α−s(α−β)=0である。a=bならば補題 1.2 (3)によりα=β=0となり、(α,β)=(0,0)と両立しないので、a=bである。補題 1.2 (3)によりp=a+t(b−a)を満たすt∈Rが存在する。補題 1.2 (1)の等式をα,β,γ,δに適用し、§D3.4 系 6.2により二つの列を入れ替えると行列式の符号が変わることを用いると
γ−δ=det(d,a)+det(a,c)−det(d,b)−det(b,c)=det(b,d)+det(d,a)−det(b,c)−det(c,a)=β−αである。α=βであるからγ=δであり、特に(γ,δ)=(0,0)であるから、前段によりt′:=γ/(γ−δ)∈[0,1]である。補題 1.2 (2)により、任意のτ∈Rに対して
D(c,d,(1−τ)a+τb)=(1−τ)γ+τδ=γ−τ(γ−δ)であり、γ=δであるからこの値が0となるτはt′だけである。一方、補題 1.2 (2)と補題 1.2 (1)によりD(c,d,p)=(1−s)D(c,d,c)+sD(c,d,d)=0であり、p=(1−t)a+tbであるからt=t′∈[0,1]である。したがってp∈[a,b]∩[c,d]である。
α=β=γ=δ=0とする。a,b,c,dがすべて直線{q+τv∣τ∈R}に属するようなq∈R2とv∈R2∖{0}が存在する。実際、a=bならば、補題 1.2 (3)によりα=β=0からc,dは{a+τ(b−a)∣τ∈R}に属するので、q:=a、v:=b−aとすればよい。a=bかつc=dならば、補題 1.2 (3)によりγ=0からa=bは{c+τ(d−c)∣τ∈R}に属するので、q:=c、v:=d−cとすればよい。a=bかつc=dならば、q:=aとし、c=aのときv:=c−a、c=aのときv:=(1,0)とすればよい。
a=q+tav、b=q+tbv、c=q+tcv、d=q+tdvと書く。λ∈[0,1]に対して(1−λ)a+λb=q+((1−λ)ta+λtb)vであり、λ↦(1−λ)ta+λtbは[0,1]をTab:=[min{ta,tb},max{ta,tb}]の上へ写すので、[a,b]={q+τv∣τ∈Tab}である。Tcd:=[min{tc,td},max{tc,td}]と置くと、同じ理由で[c,d]={q+τv∣τ∈Tcd}である。vj=0を満たすj∈{x,y}をとると、φ(τ):=qj+τvjはRからRへの狭義単調な全単射であり、φ(ta)=aj、φ(tb)=bj、φ(tc)=cj、φ(td)=djであるから、φはTabを[min{aj,bj},max{aj,bj}]の上へ、Tcdを[min{cj,dj},max{cj,dj}]の上へ写す。条件 (a)によりこの二つの閉区間は共通の元rをもち、τ0:=φ−1(r)はTab∩Tcdに属する。したがってq+τ0v∈[a,b]∩[c,d]である。▨
例 4.3.
- a:=(0,0)、b:=(1,0)、c:=(1,0)、d:=(1,1)とすると、D(a,b,c)=0、D(a,b,d)=1、D(c,d,a)=1、D(c,d,b)=0であり、座標の閉区間も交わる。二つの閉線分は端点b=cだけを共有する。
- a:=(0,0)、b:=(2,0)、c:=(1,0)、d:=(3,0)とすると、四点は共線であり、四つの行列式はすべて0である。x座標の閉区間[0,2]と[1,3]は交わり、[a,b]∩[c,d]=[c,b]である。
- a:=(0,0)、b:=(1,0)、c:=(2,0)、d:=(3,0)とすると、四つの行列式はすべて0であり定理 4.2 条件 (b)と定理 4.2 条件 (c)は成り立つが、x座標の閉区間[0,1]と[2,3]は交わらず、[a,b]∩[c,d]=∅である。
- c:=(0,0)、d:=(2,2)とする。点線分[a,b](b=a)について、a=(1,1)ならばD(c,d,a)=D(c,d,b)=0であり、三条件が成り立ってa=21c+21d∈[c,d]である。a=(1,2)ならばD(c,d,a)=D(c,d,b)=2であり、D(c,d,a)D(c,d,b)=4>0であるから[a,b]∩[c,d]=∅である。
系 4.4.Fを浮動小数点数系とし、a,b,c,d∈F2とする。四つの三つ組(a,b,c)、(a,b,d)、(c,d,a)、(c,d,b)のフィルタ付き向き判定が返す値をそれぞれσ1,σ2,σ3,σ4とする。[a,b]∩[c,d]=∅であることは、j∈{x,y}のそれぞれについて
max{min{aj,bj},min{cj,dj}}≤min{max{aj,bj},max{cj,dj}}が成り立ち、かつσ1σ2≤0、σ3σ4≤0であることと同値である。この判定は有理数の有限回の四則演算と大小比較で終了する。
証明.定理 3.4 (1)によりσ1=sgnD(a,b,c)、σ2=sgnD(a,b,d)、σ3=sgnD(c,d,a)、σ4=sgnD(c,d,b)である。実数u,wについてsgn(uw)=sgnusgnwであるから、σ1σ2≤0は定理 4.2 条件 (b)と同値であり、σ3σ4≤0は定理 4.2 条件 (c)と同値である。実数p≤q、r≤wについて閉区間[p,q]と[r,w]が交わることはmax{p,r}≤min{q,w}と同値であるから、座標の不等式は定理 4.2 条件 (a)と同値である。したがって定理 4.2により同値性が成り立つ。四回のフィルタ付き向き判定は定理 3.4 (1)により有限回の演算と比較で終了し、座標の不等式はFの元の有限回の比較で判定される。▨
例 4.5.F:=F(2,53,−1022,1023)、flをFの最近接偶数丸め、n:=227とし、a:=(0,0)、b:=(n,n−1)、c:=(n+1,n)を例 2.2の点、e:=(n,n−2)とする。閉線分[a,c]と[b,e]について
D(a,c,b)=(n+1)(n−1)−n⋅n=−1,D(a,c,e)=(n+1)(n−2)−n⋅n=−n−2であり、D(a,c,b)D(a,c,e)=n+2>0であるから、定理 4.2により[a,c]∩[b,e]=∅である。またD(b,e,a)=0⋅(−(n−1))−(−1)(−n)=−n、D(b,e,c)=0⋅1−(−1)⋅1=1である。
D(a,c,b)の二つの積の厳密な結果は(n+1)(n−1)=254−1とn⋅n=254であり、例 2.2によりq1=q2=254、D(a,c,b)=0である。残りの三つの浮動小数点評価では、各演算の厳密な結果はn⋅n=254、(n+1)(n−2)=2(253−226−1)、または絶対値が253以下の整数であり、第1のものは例 2.2により、第2のものは§E20.1 補題 1.2 (1)により、第3のものは§E20.1 補題 1.3 (1)によりFに属する。§E20.1 系 3.2 (1)によりこれらの演算は正確であり、D(a,c,e)=−n−2、D(b,e,a)=−n、D(b,e,c)=1である。したがってD(a,c,b)D(a,c,e)=0≤0、D(b,e,a)D(b,e,c)=−n≤0であり、x座標の閉区間[0,n+1]と[n,n]、y座標の閉区間[0,n]と[n−2,n−1]も交わるので、定理 4.2のDをDに替えた判定は交わると答える。
(a,c,b)のフィルタ付き向き判定では、積の区間はoutF([254−1,254−1])=[254−2,254]と[254,254]であり、EF(X)=[−2,0]は0を含むので手順定義 3.3 (2)へ進み、D(A,C,B)=22148D(a,c,b)=−22148からσ1=−1を返す。残りの三つの三つ組では、各区間演算の結果がFの元を端点とする一点区間であり、§E20.36 定理 3.3 (1)により外向き丸めで変わらないので、EF(X)はそれぞれ{−n−2}、{−n}、{1}であり、手順定義 3.3 (1)がσ2=−1、σ3=−1、σ4=1を返す。σ1σ2=1>0であるから、系 4.4の判定は交わらないと答える。
5 近似された入力
6 演習
問題 6.1.F:=F(2,53,−1022,1023)、flをFの最近接丸めとし、a,b,c∈Z2の座標の絶対値がすべて225以下であるとする。D(a,b,c)が定まり、D(a,b,c)=D(a,b,c)が成り立つことを示せ。
解答.
s52=1であるから、§E20.1 補題 1.3 (1)をe=52として適用すると、絶対値が253以下の整数はFに属する。a,b,cの座標はFに属する。四つの差の厳密な結果は絶対値が226以下の整数であるからFに属し、§E20.1 系 3.2 (1)によりd1,d2,d3,d4は厳密な差に等しい。二つの積の厳密な結果は絶対値が226⋅226=252以下の整数であるからFに属し、§E20.1 系 3.2 (1)によりq1=d1d2、q2=d3d4である。最後の減算の厳密な結果はq1−q2=D(a,b,c)であり、絶対値が252+252=253以下の整数であるからFに属し、§E20.1 系 3.2 (1)によりD(a,b,c)=D(a,b,c)である。七つの演算の厳密な結果の絶対値は253以下であり、253≤Nmaxであるから、D(a,b,c)は定まる。▨