3
大学数学基礎解説
文献あり

N進数展開の一般化と分解について

1088
0

コンバンハー(´∀`∩
十進法を一般化した記数法を定義してMinecraft計算機に使ったCORDICアルゴリズムの10進数化の解説に繋げたいと思って書きました。

まず初めに使用する記号の定義をまとめて書いておく。
意味は具体例を通して考察する。
(用語は独自です。先行研究は具体例で述べた部分以外は独力でやったものなのであるかどうか知りません。)

すべて実数

実数全体の集合R,整数全体の集合Z,
ZN2,k=1,2,,N,ωΩ
[A,B)={z|Az<B,zR}(半開区間)
[]β=(β1,β2,,βN)   (β1>β2>>βN>0)
[]λ=(λ1,λ2,,λN)   (λkΛZ)
[]ω=βλ+ϵ=k=1Nβkλk +ϵ   (ϵE)
M=max(Λ)min(Λ)
m=sup(E)inf(E)(E=[A,B)のとき、sup(E)=B,inf(E)=A)

Ω,ω,β,λ,Λ
ϵ,E,m,
Ω,Eは半開区間のみを考えることにする。

(β,Λ)が与えられた状態で変数ωから分解(λ,ϵ)を求める操作を「(β,Λ)分解」と呼ぷ。
任意のωΩに対して(λ,ϵ)が唯一つだけ存在するとき「分解は一意的である」と呼ぷ。
一方で分解が唯一つに定まらないときは「分解は冗長である」と呼ぷ。
任意のωΩに対し分解(λ,ϵ)が存在するとき「分解は完全である」と呼ぷ。

まずはこれがb進法を抽象化し、一般化したものであることを確認する。

N桁b進数展開

Zb2, Ω=[0,bN), βk=bNk, Λ=[0,b)Z={0,1,,b1}, E=[0,1)

一応例示すると、10進数の場合
N=3,b=10,β=(100,10,1),ω=137.035=(1,3,7)β+0.035,ϵ=0.035
で、分解は(λ,ϵ)=((1,3,7),0.035)である。βは倍率の数列である。MΛの最大元から最小元を引いた数だが、今回の場合はb1である。
また、N桁以下の非負実数全体は[0,bN)であることから自明に分解(b進数展開の整数部)は一意的かつ完全であることがわかる。
βは単調減少数列であるとしたが、このようにこの記事ではほぼ指数関数的な減少をするものばかりを扱う。
またΩも連続した区間を考える。
別の例について見る。

平衡三進法

βk=3Nk,  Ω=[3N2,3N2),  Λ={1,0,1},  E=[12,12)

3進法と似ているが、表示の集合Λが違う。例としてN=3,ω=8を考えるとこの分解は8=1×32+0×31+1¯×30より
(β,ϵ=((1,0,1¯),0)となる。ただし、1¯=1などと表したりする。この分解は完全かつ一意的であることは実験すればわかる。

冗長ニ進法

βk=2Nk,  Ω=[12N,2N),  Λ={1,0,1},  E=[0,1)

2進数と似ているが、この場合は冗長性がある。例示するとω=3の場合、λ=(1,0,1¯),(0,1,1)という2通りの場合が存在する。すなわち分解は冗長的である。しかし、完全ではある。

今まではλkΛZと考えてきたが、λkΛkZというように、桁ごとに表示の集合が異なるような例を今だけ考えてみる。

階乗進法

βk=(N+1k)!, Λk={0,1,,N+1k}, Ω=[0,(N+1)!), E=[0,1)

例えば37=1×4!+2×3!+1×1!よりλ=(1,2,0,1)
ググれば多分情報は出るので詳しくは省略するが、これも面白い数の表現方法である。
(思い付いた時は感動しました。)
分解は完全かつ一意的である。(確か一意性の証明が東大の過去問にあったっけな)

ここまでは全て完全なものを考えてきたが、不完全な例も簡単に作ることができる。

不完全な10進数

N=3, β=(1000,100,1), Ω=[0,104), Λ=[0,10)Z,E=[0,1)

実際、99などの分解は10の位が欠損していることから集合の範囲内で実行できない。また分解は一意的である。

次も不完全な例である。

表示が欠けた10進数

N=3, β=(100,10,1), Ω=[0,103), Λ={0,1,,8}, E=[0,1)

例1,2,3,6を踏まえて一般化すると次のようなことがわかる。

βは公比b1の等比数列でΛは連続したb個の整数の集合とする。M=b1ならば完全かつ一意的に表すことができる。M>b1であれば冗長性が生まれる。またM<b1であれば完全でなくなる。

次も興味深い例である。

Zeckendorf表示

Fibonacci数列をF1=F2=1,Fn+1=Fn+Fn1と定めると、黄金比ϕ=1+52
Fn=ϕn(ϕ)n5と表すことができる。
βk=FN+2k, Λ={0,1}, Ω=[0,FN+2), E=[0,1)

Fnは公比ϕ1.6の等比数列と近似できるので、形式的にb=ϕとして例5の説明に当てはめてみるとM=1>b1となることからこの分解は冗長であることが予想できるだろう。これは漸化式を見ると当たり前で、F4=βN2=βN1+βNと2通りに分解できている。しかし、表示λに、以下のような条件を課すと表示は一意的となる:
任意のkに対しλk=0 or λk+1=0.
ただしλN+1=0.
これをZeckendorf表示と呼び、分解は完全でかつ条件付きで一意的であるという著しい性質を持つ。ググると証明がある。

具体例を通して性質を見てきたところで、分解が完全であるかどうかを基底から判別する方法について考察する。
幾つかの仮定をする。

βNM|Λ|1m
E=[inf(E),sup(E))
Ω[inf(E)+k=1Nmin(Λ)βk,sup(E)+k=1Nmax(Λ)βk)
E,Ωは連続した区間
Λは等差数列(2元の場合も)からなる集合
βはほぼ指数関数的減少

基底の完全性

任意のnZ(1nN1)に対して以下の条件が満たされるとき基底は完全である。
βnM|Λ|1Mk=n+1Nβk+m

例1のb進数で考えると、仮定と命題2の条件は満たされていることがわかる。M=b1,m=1より
Mk=n+1Nβk+m=(b1)k=n+1NbNk+1=bNn=βn
となるので命題はこの場合正しいことがわかる。次に補題1の状況で考えるとMb1
基底の分解が完全であることは同値なので上の命題は十分条件になると捉えられる。

Nに関する帰納法で証明する。
N=0の場合、E=Ωとすれば完全である(うまく定義を拡張すれば)。
次にλ1=min(Λ)で固定するとき、ωが動きうる範囲をΩとして、Ωが仮定を満たしてかつ命題2の条件を満たしているとする。このとき帰納法の仮定から、(β=(β2,β3,,βN),Λ)による分解はΩの範囲で完全であることがわかる。
Λは公差M|Λ|1の等差数列であるから非負整数Xが存在して
β1λ1=β1min(Λ)+Xβ1M|Λ|1である。
ここでΩの長さは
|Ω|=sup(Ω)inf(Ω)=Mk=2Nβk+m
で命題2より
β1M|Λ|1Mk=2Nβk+m=|Ω|
となる。集合
Ω~={ω+Xβ1M|Λ|1|ωΩ,X=0,1,,|Λ|1}
(β,Λ)による分解のもとで完全である。ΩΩ~だからΩにおいて基底は完全である。

CORDICアルゴリズム導入部分に話をつなげる。
arctan(x)は関数tan(x)の逆関数である。

二進(通常)CORDICの分解基底

βk=arctan(12k1), Ω=[0,π2), Λ={1,1}, E=[0,2βN)

これが命題2の条件を満たすことを証明しよう。
M=2,m=2βN,|Λ|=2である。
加法定理より
arctan(u)+arctan(v)=arctan(u+v1uv)arctan(u+v)
であることを何回か使うと
任意のnZ(1nN1)に対して
Mk=n+1Nβk+m=2k=n+1Narctan(12k1)+2arctan(12N1)2arctan(k=n+1N12k1+12N1)=2arctan(12n1)=βnM|Λ|1

なので命題の条件は満たされる。
sup(E)+k=1Nmax(Λ)βk=βN+β1+(k=2Nβk+βN)βN+β1+β1>π2
なので仮定を満たすことがわかる。これで命題2より基底は完全であることが証明された。Nを大きくするとβN0、つまり誤差幅m0であるからCORDICアルゴリズムの収束性は保証される。

最後に十進CORDICアルゴリズムの収束性について同様の考察をする。

十進CORDICの分解基底

ZD2, N=4D, k=4s+t, t{1,2,3,4}
(c1,c2,c3,c4)=(4,2,2,1)
β0=arctan(1)
βk=arctan(ct10s+1)
Ω=[0,π2), Λ={1,1}, E=[0,2βN)

(便宜上β0を追加しなければならない...。)
基底の完全性の証明は二進CORDICと同様に行う。
n=4S+T, (T{1,2,3,4})とする。
Mk=n+1Nβk+m=2s=S+1D1t=14arctan(ct10s+1)+2arctan(110D)+2t=T+14arctan(ct10S+1)2arctan(s=S+1D1t=14ct10s+1+110D+t=T+14ct10S+1)=2arctan(s=S+1D1910s+1+110D+t=T+14ct10S+1)=2arctan(110S+1(1+t=T+14ct))2arctan(cT10S+1)=βnM|Λ|1

ただし、j=v+1vAj=0と定める。
命題2よりこの基底は完全である。
s=S+1D1t=14ct10s+1+110D+t=T+14ct10S+1
の部分を見るとc1+c2+c3+c4=9が重要であることがわかる。c1+c2+c3+c48のとき、命題2を証明することはできず、基底は不完全となってしまう。完全となるためにはc1+c2+c3+c49が必要である。また、βがほぼ等比数列で減少することを合わせると、c(c1,c2,c3,c4)=(4,2,2,1)が最適であるとわかる。

この話を用いて次の記事ではMinecraftのために少し変更した十進CORDICアルゴリズムを解説したい。

参考文献

[1]
高木 直史, 算術演算のVLSIアルゴリズム, (並列処理シリーズ), コロナ社, 2005
投稿日:2021915
更新日:2024229
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

赤げふ
赤げふ
92
16381
東工大情報M1 数学,理論物理,Minecraft計算機/微分演算子の記事を書きます/主に表現論,量子群,物理の数理に興味があります

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中