Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
1 逐次型乗算
2 キャリ・セーブ・アダー
3 Wallaceツリー
4 2乗回路
5 負の数の乗算
6 剰余表現
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 2 / 78
乗算について
十進数の乗算の例
3 5 · · · 3× 101 + 5× 100
× 5 7 · · · 5× 101 + 7× 100
3 5 · · · 5× 100 + 7× 100
2 1 · · · 3× 101 + 7× 100
2 5 · · · 5× 101 + 5× 100
1 5 · · · 5× 101 + 3× 101
1 9 9 5
1 部分積(partial product)を求める
2 桁を合わせて加算する
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 3 / 78
2進数の乗算
1 0 0 1× 0 1 0 1
1 0 0 10 0 0 0
1 0 0 10 0 0 0
0 1 0 1 1 0 1
1 部分積 ⇒ ANDゲートを使って並列に計算できる
2 桁を合わせる ⇒ シフトで実現できる
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 4 / 78
1 逐次型乗算
2 キャリ・セーブ・アダー
3 Wallaceツリー
4 2乗回路
5 負の数の乗算
6 剰余表現
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 5 / 78
逐次型乗算
筆算のアルゴリズムを,直接ハードウェア化する
X : [x7, x6, . . . , x0],Y : [y7, y6, . . . , y0],P : [p2n−1, . . . , p1, p0]
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 6 / 78
乗算器の動作
1 レジスタ P を 0にリセット
2 レジスタ Y は,1サイクルごとに最下位ビットを取り出し,サイクル終了時に右シフト
3 レジスタ P は
上位 9ビットが積算値の保存用上位 8ビットが次のサイクルでの加算器へ入力下位 8ビットは右シフトされる
4 これを 8サイクル繰り返すと乗算が終了
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 7 / 78
逐次型乗算器の性質
部分積の生成は n個の ANDゲート
アダーの選択で計算時間・回路規模が変化
リプル・キャリ
キャリ・ルックアヘッド
並列プレフィックス型
速度は遅いが,全体の回路規模は小さい
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 9 / 78
逐次型乗算の高速化
アイデア
生成される部分積の数を減らせば,加算処理にかかる時間を短縮できる
Booth Recoding (1951)
2進数「0111 . . . 11」を「1000 . . . 01」に変換する.ここで 1は−1を意味する.
Example
0111 (= 7) → 1001(= 8− 1)
01110111 (= 119) → 10011001 (= 128− 16 + 8− 1)
0111101011111001 → 1000111100001011
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 11 / 78
Booth Recoding
変換は最下位桁から順に行う
Table: Rule for Booth recoding
yj yj−1 yj 状況
0 0 0 0の列の中
0 1 1 1の列の終了
1 0 1 1の列の開始
1 1 0 1の列の中
0111101011111001→ 1000111100001011
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 12 / 78
Booth Recodingの改良
0が減ることもある
01010101 → 11111111
0でない要素の数が最小になるように recodingしたい
Table: Good Recoding (cj , yj)
cjyj+1 yj 0 1
0 0 0,0 0,1
0 1 0,1 1,0
1 0 0,0 1,1
1 1 1,1 1,0
01010101 → 01010101
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 13 / 78
Booth Recoding
高速化のアイデア
部分積の数を減らす
シフト+加算の速度を上げる
Booth Recodingは「部分積を減らす」ことを目的にしているが,同期式回路では高速化には結びつかない(クロック数は減らない).
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 14 / 78
4を基底とする乗算
基底を大きくして乗算を行う
基底が大きくなる(2進数⇒4進数⇒8進数⇒ . . .)と,桁数が減る
乗数を 2ビットずつ区切ることで,4進数との積を計算することにしてサイクル数を減らす
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 15 / 78
Example: Radix-4 Multiplication
4を基底とする乗算
4サイクルで演算が終了する
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 17 / 78
4を基底とする乗算
Radix-4 Multiplication
4進数を使って計算することで,サイクル数を減らす(nサイクル⇒ ⌊n/2⌋サイクル)マルチプレクサが大きくなる
サイクルがスタートする前に 3X = 2X +X を計算しておき,レジスタ等へ記憶しておく必要がある
基本的な回路の構造は,通常の逐次乗算器とほとんど同じ
同様にして 8進数,16進数を使ってサイクル数を減らすこともできる
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 18 / 78
4を基底とするBooth Recoding
Table: Booth decoder with radix-4
y2j+1 y2j y2j−1 yj
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 2
1 0 0 −21 0 1 −11 1 0 −11 1 1 0
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 19 / 78
基底が 4のBooth Recoding
Radix-4 Booth Recoding
ビット数がおよそ半分になる
加算回路,減算回路,シフトのみで実現可能
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 20 / 78
Recoding Rule
Y = (yn−1yn−2 . . . y1y0)2
=∑
0≤k≤n−1
(yk × 2k)
=∑j≥0
(y2j × 22j) +∑j≥0
(y2j+1 × 22j+1)
=∑j≥0
(y2j × 22j) +∑j≥0
[(y2j+1 × 22j+2)− (y2j+1 × 22j+1)]
=∑j≥0
(y2j × 22j) +∑j≥0
(y2j−1 × 22j)−∑j≥0
(y2j+1 × 22j+1)
=∑j≥0
(−2y2j+1 + y2j + y2j−1)× 22j
ただし y−1 = 0とする.
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 21 / 78
(y7y6y5y4y3y2y1y0) =
y7 · 28 − y7 · 27+ y6 · 26+ y5 · 26 − y5 · 25
+ y4 · 24+ y3 · 24 − y3 · 23
+ y2 · 22+ y1 · 22 − y1 · 21
+ y0 · 20
= y728 + (−2y7 + y6 + y5)2
6 + (−2y5 + y4 + y3)24 + (−2y3 + y2 + y1)2
2 +(−2y1 + y0 + y−1)2
0
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 22 / 78
Booth Recoding
∑j≥0
(−2y2j+1 + y2j + y2j−1)× 22j
y2j+1 y2j y2j−1 yj
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 2
1 0 0 −21 0 1 −11 1 0 −11 1 1 0
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 23 / 78
逐次型乗算器
まとめ
筆算を素直にハードウェア化
部分積を ANDゲートで並列に求める部分積を逐次的に求める
高速化の工夫
Booth Recoding(1の数を減らす)基数を 4にする Booth Recoding(ビット数を半分に)
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 24 / 78
1 逐次型乗算
2 キャリ・セーブ・アダー
3 Wallaceツリー
4 2乗回路
5 負の数の乗算
6 剰余表現
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 25 / 78
ふたたび筆算
まずはリプル・キャリで
この加算をリプル・キャリ・アダー型で FAを連結させたら?
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 26 / 78
ここでのポイント
遅延の改善
二数の加算では,下位からのキャリを待つ必要がある
多項加算(三つ以上の数の加算)では,待たずに加算できる場合が
ある
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 29 / 78
キャリ・セーブ・アダー
キャリ・セーブ
フル・アダーをいくつか組にしたもの
キャリを上位に上げるのではなく,次の段で計算するために出力す
るだけ
その段で加算できるものはして,できないものは次の段に渡す
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 32 / 78
ci 1 0 1 1 1 0 0 1x 0 0 1 0 1 0 1 0y 0 0 1 1 1 0 0 1
Sum: 1 0 1 0 1 0 1 0Carry: 0 0 1 1 1 0 0 1
Result: 1 0 0 0 1 1 1 0 0
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 33 / 78
キャリ・セーブ・アダーの構成法
CSA
キャリ・セーブは乗算に限らず,3項以上の加算で有効
回路の構成は比較的複雑になる
リプル・キャリ・アダーは遅いが構成は単純
アダー配置図で回路図の構成を把握できる
アダー配置図
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 36 / 78
キャリ・セーブ・アダー
まとめ
1 乗算に限らず,多項加算の伝搬遅延を改善する方法の一つ
2 フル・アダーを一段ずつ組にして,並列に加算を行う
3 やみくもにキャリを上位に伝搬するのではなく,その段では保留に
する
4 加える数が二項まで減ったら,通常の二項加算にする
そうしないと段数が増えてしまうことがある
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 39 / 78
1 逐次型乗算
2 キャリ・セーブ・アダー
3 Wallaceツリー
4 2乗回路
5 負の数の乗算
6 剰余表現
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 40 / 78
再びCarry Save Adder
Carry Save Adder
CSAの見直し
CSA一段では下位からのキャリは待たなくてよい,しかし
入力する数 x , y , z ,w , v は,基本的にそのまま
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 41 / 78
桁が同じビットはとにかく加算
「桁があっていれば,とにかく加算」
後はフル・アダーで
桁を揃えたらフル・アダーで「3ビット→2ビット」の変換を次々に行っていく
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 42 / 78
3-2 Compression
フル・アダーとは…
3ビットの数値を,s と c の 2ビットに変換するもの
3-2 compression
x 1 0 1 1 1 0 0 1y 0 0 1 0 1 0 1 0z 0 0 1 1 1 0 0 1
Sum: 1 0 1 0 1 0 1 0Carry: 0 0 1 1 1 0 0 1
Result: 1 0 0 0 1 1 1 0 0
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 43 / 78
Wallaceツリーのアイデア
1 n項の数を加算したいとき,⌊n/3⌋個のキャリ・セーブ・アダーを使って 3項の加算を並列に行う
2 加算する項数が ⌊2n/3⌋になる3 およそ log2/3 n段の加算で二項の加算になる
4 最後に通常の二項加算を行う
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 44 / 78
Wallaceツリーの構成法
ルール
1 同じ桁にm ≥ 3ビットあれば,フル・アダーを ⌊m/3⌋個使って加算2 加算可能な最下位の桁に 2ビットあるときは,ハーフアダーで加算
下位からのキャリはないから,その桁は終了
3 すべての桁が 3ビット以下になったら,すべての桁でフル・アダー,ハーフ・アダーを使って加算
4 最後に 2項になったら,通常の二項加算をして終了
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 45 / 78
Wallaceツリー
まとめ
回路の段数はO(log n)となり,高速な乗算ができる
素子数はO(n2)程度
配線,レイアウトは複雑になりがち
面積も大きくなる
フル・アダーからの出力のファンアウトは常に 1
部分積の生成を並列に行うとすると,ビット数に比例してファンア
ウトが大きくなってしまう
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 48 / 78
1 逐次型乗算
2 キャリ・セーブ・アダー
3 Wallaceツリー
4 2乗回路
5 負の数の乗算
6 剰余表現
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 49 / 78
2乗を計算する回路
x2 = (x3 × 23 + x2 × 22 + x1 × 21 + x0 × 20)2
= x3x3 × 26 + x2x3 × 25 + x1x3 × 24 + x0x3 × 23
+ x3x2 × 25 + x2x2 × 24 + x1x2 × 23 + x0x2 × 22
+ x3x1 × 24 + x2x1 × 23 + x1x1 × 22 + x0x1 × 21
+ x3x0 × 23 + x2x0 × 22 + x1x0 × 21 + x0x0 × 20
= x23 × 26 + x22 × 24 + x21 × 21 + x20 × 20
+ 2× (x3x2 × 25 + x3x1 × 24 + x3x0 × 23 + x2x1 × 23)
+ 2× (x2x0 × 22 + x1x0 × 21)
単純に展開すると部分積が 16個
最後のようにまとめると 10個にできる(xixj = xjxi)
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 50 / 78
2乗回路
加算する項数
nビットの数を 2乗するとき,加算すべき項数は
単純に積を計算すると n2個
この方法によると n(n + 1)/2
項数の比は (n + 1)/2nとなるので,nが大きくなるほど 1/2に近づく
加算・乗算の工夫
積の性質(ab = ba),シフト,冗長性などを利用して回路を単純化,省ゲート化,スピードアップをする方法の一例
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 52 / 78
1 逐次型乗算
2 キャリ・セーブ・アダー
3 Wallaceツリー
4 2乗回路
5 負の数の乗算
6 剰余表現
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 53 / 78
符号付き 2進数の乗算
符号付き 2進数=2の補数で表現された整数
方法その 1
符号(+−)と絶対値に変換すればよい?
正に変換
入力で絶対値をとり,出力で符号を戻す
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 54 / 78
X のみが符号付きの場合
単純に符号拡張で加算すると…
同じ加算が何か所も現れるのでムダ
上の方の数ほど,符号ビットのファンアウトが増える
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 56 / 78
2の補数
2の補数表現 X = (xn−1xn−2 . . . x1x0)2
性質その 1
X = −xn−1 × 2n−1 + (xn−2 × 2n−2 + · · ·+ x0)
先頭のビットは必ず負
残りは正 を表す
性質その 2
−X = X + 1
加算や減算を混ぜないように,単なる加算にする
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 57 / 78
符号付き 2進数の乗算
まとめ
入力を符号と絶対値に分解して乗算
でも乗算はできるが効率は低下.
しかし…
部分積の生成で,負を表すビットを反転させる
定数 1を適切に加える
ようにすれば,ほとんど回路は変化しない.
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 61 / 78
1 逐次型乗算
2 キャリ・セーブ・アダー
3 Wallaceツリー
4 2乗回路
5 負の数の乗算
6 剰余表現
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 62 / 78
剰余表現
Residue Number System (RNS)
互いに素である整数
m1,m2, . . . ,mh, gcd(mi ,mj) = 1
と整数 X , 0 ≤ X ≤ M = m1m2 . . .mhに対して
(X1,X2, . . . ,Xh), ここで Xi = X mod mi
を X の剰余表現という
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 63 / 78
Example of RNS
x mod 15 x mod 3 x mod 5
0 0 01 1 12 2 23 0 34 1 45 2 06 0 17 1 28 2 39 0 410 1 011 2 112 0 213 1 314 2 4
5 = (2, 0), 13 = (1, 3)
5 + 13 = 18 = 3 (mod 15)
(2, 0) + (1, 3) = (2 + 1, 0 + 3)
= (0, 3)
(2, 0)× (1, 3) = (2× 1, 0× 3)
= (2, 0)
5× 13 = 5 (mod 15)
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 64 / 78
剰余表現の性質
M = m1m2 . . .mhとする.
0 ≤ X < M である任意の整数に対して,その剰余表現(X1,X2, . . . ,Xh)は一意に定まる
剰余表現 (X1,X2, . . . ,Xh)を持つ整数 X は,M を法として一意に定まる
加減算,乗算の剰余表現は,剰余桁ごとに独立して計算して得られ
るものと等しい
計算への応用
ビット数の大きな整数 X を,小さな数 Xi の組で表す
加減乗算の計算を,h個の加算器・乗算器でそれぞれ独立に実行できる
mi のビット数を小さくとれば,それぞれの演算は高速になる
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 65 / 78
剰余表現の短所
X → (X1,X2, . . . ,Xh)の変換が必要
計算終了後 (X1,X2, . . . ,Xh)→ X の逆変換が必要
数の大小比較,正負の判定,オーバーフローの検出が困難
除算も困難
以上のことから
加減乗算を繰り返す処理をして,最後に整数に逆変換して出力
除算や大小比較がない処理
に適している手法
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 66 / 78
剰余表現への変換
変換
X → (X1,X2, . . . ,Xh), Xi = X mod mi
X = xn−1 . . . x1x0とする
1 あらかじめ qj = 2j mod mi , j = 0, 1, . . . , n − 1を計算しておく
2 以下の計算をする
Xi ←∑
0≤j≤n−1
xjqj mod mi
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 67 / 78
変換
X → (X1,X2, . . . ,Xh), Xi = X mod mi
X = 177, m = 5, 177 mod 5 = 2
1 177 = 10110001,
2 27 mod 5 = 3, 26 = 4, 25 = 2, 24 = 1, 23 = 2
3 177 mod 5 = (3 + 0 + 2 + 1 + 0 + 0 + 0 + 1) mod 5 = 2
mi のビット数が小さければ,2j mod mi の値はあらかじめ計算して
テーブルに保存しておく
計算のときは,テーブルを参照する
最後の加算はキャリセーブ,Wallaceツリーなどの手法で高速化できる
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 68 / 78
剰余表現の演算
加減乗算
(X1,X2,X3) + (Y1,Y2,Y3) = (X1 + Y1,X2 + X2,X3 + Y3)
(X1,X2,X3)− (Y1,Y2,Y3) = (X1 − Y1,X2 − X2,X3 − Y3)
(X1,X2,X3)× (Y1,Y2,Y3) = (X1 × Y1,X2 × X2,X3 × Y3)
剰余桁ごとの演算はm1,m2,m3を法として行う
m1 = 5,m2 = 6,m3 = 7, M = 210
(2, 3, 2) + (0, 1, 6) = (2, 4, 1) (177 + 55 = 22 (mod 210))
(2, 3, 2)− (0, 1, 6) = (2, 2, 3) (177− 55 = 122 (mod 210))
(2, 3, 2)× (0, 1, 6) = (0, 3, 5) (177× 55 = 75 (mod 210))
法が数ビットであれば,演算結果もテーブル化することもできる
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 69 / 78
2k − 1, 2k , 2k + 1を法とする剰余表現
ソフトウェア,ハードウェアを問わず,計算の高速化のために剰余表現
を利用するアプリケーションがある
法として 2k − 1, 2k , 2k + 1を選ぶことが多い
変換が容易になる
法が 2k の場合
X mod 2k =(X の下位 k ビット)加算は通常の k ビットの加算を行えばいい
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 70 / 78
法が 2k − 1の場合
1 X を下位から k ビットずつに区切って
2 それらを 2k − 1を法として加算すればよい
X = 177 = 010110001, k = 3, 2k − 1 = 7
010 110 0012 6 1
177 mod 7 = (2 + 6 + 1) mod 7 = 2
この手法の正当性
2jk = (2k)j = 1j = 1であることから従う
9で割った余りを求める方法と同じ!
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 71 / 78
2k − 1を法とした加算
1 通常の k ビットの加算を行い
2 最上位からのキャリを最下位に加える(キャリ循環)
3 結果が 2k − 1の場合のみ,これを 0に補正する
(キャリ)= 0なら,和(k ビット)がそのまま加算結果
(キャリ)= 1なら,その和を S とすると
S mod (2k − 1) = S − (2k − 1)
= (S + 1)− 2k
= (S + 1) mod 2k
となるので,1(キャリ)を加えて下位 k をとればよい
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 72 / 78
法が 2k + 1の場合
1 X を下位から k ビットずつ区切り,それぞれを k ビットの数とする
2 下位から偶数番目ならそのまま,奇数番目なら−1倍して,それらを加算する(2k + 1を法として)
177 = 010110001, k = 3, 2k + 1 = 9, 177 mod 9 = 6
010 110 0012 6 1
177 mod 7 = (1− 6 + 2) mod 9 = 6
正当性
2jk = (2k)j = (−1)j であることから従う
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 73 / 78
2k + 1を法とした剰余は k + 1ビットで表す
2k + 1を法とした加算
1 最上位からキャリが出たら和は 2k − 1 = (01 . . . 11)
2 和が 2k = 10 . . . 00ならそのまま
3 それ以外なら通常の k + 1ビットの加算を行う
4 最上位ビットが 1なら,最上位と最下位から 1を引く(2k + 1 = 10 . . . 01)
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 74 / 78
剰余表現から整数への逆変換
逆変換
(X1,X2, . . . ,Xh)→ X , Xi = X mod mi
アルゴリズム
1 M = m1m2 . . .mh
2 M1 = (1, 0, . . . , 0),M2 = (0, 1, . . . , 0), . . . ,Mh = (0, 0, . . . , 1)となるMi を求めておく.
3 以下を計算
X ←∑
1≤i≤h
XiMi mod M
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 75 / 78
逆変換の例
m1 = 5,m2 = 6,m3 = 7, M = 210
M1 = (1, 0, 0) = 126
M2 = (0, 1, 0) = 175
M3 = (0, 0, 1) = 120
X = (2, 3, 2)なら,M = 210を法として
X = 126× 2 + 175× 3 + 120× 2 (mod 210)
= 42 + 105 + 30 (mod 210)
= 177
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 76 / 78
Chinese Remainder Theorem
互いに素な整数の組m1,m2, . . . ,mhに対して
X = X1 (mod m1)
X = X2 (mod m2)
. . .
X = Xh (mod mh)
を満たす整数 X はM = m1m2 . . .mhを法としてただ一つ存在する.
m1 = 5,m2 = 6,m3 = 7, M = 210, X = (2, 3, 2)
「X = 126× 2 + 175× 3 + 120× 2」は,合同式
X = 2 (mod 5), X = 3 (mod 6), X = 2 (mod 7)
を満たす.したがって X = 177がM = 210を法としてただ一つの解.
荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 77 / 78