FFTと多数桁乗算 No.2 多数桁乗算の各種方法 2007年5月 後 保範 (東京工芸大学) 1 目次 1. 筆算方式 2. Karatsuba法 3. 中国剰余定理(百五減算) 4. FFT(高速フーリエ変換)による乗算 4.1 整数FFTによる乗算 4.2 実数FFTによる乗算 4.3 複素FFTによる乗算 4.4 FFTとFMT(高速剰余変換)の関係 2 1. 筆算方式 35 73 26 87 ×) 56 43 90 81 ------------------------------------------------------------------------2835 5913 2106 7047 3150 6570 2340 7830 1505 3139 1118 3741 n2回乗算 +) 1960 4088 1456 4872 ------------------------------------------------------------------------1960 5593 7745 15395 11994 9936 7047 :桁上 桁上 20 16 72 00 15 94 06 47 :結果 結果 3 2. karatsuba法 半分の桁の乗算を4回から3回に削減 通常FFT方式と合わせて使用される。 A = a1 E + a 2 , B = b1 E + b 2 C = A × B = c1 E c 1 = a 1 × b1 , 2 + c2 E + c3 c3 = a 2 × b2 c 2 = a 1 × b 2 + a 2 × b1 d = ( a 1 + a 2 ) × ( b1 + b 2 ) = c 1 + c 2 + c 3 c 2 を c 2 = d − ( c 1 + c 3 ) で計算 4 3. 中国剰余定理(百五減算) C = A×Bを下記で求める。 (1) m個の素数P1,P2,...,Pmを決める (2) Ak=A mod(Pk), Bk=B mod(Pk) (3) Ck=Ak×Bk mod(Pk) (4) C=A×BをCkから中国剰余定理で求める 注) P1×P2×...×Pm > A×B k=1,2,...,m 高速化のため筆算方式と組み合わせる 5 3.1 中国剰余定理の計算法 P1,P2,...,PmでのC1,C2,...,Cmから結果Cを復元 (1) C=C1とする。 (2) 下記をi=2からmまで繰り返す w=(Ci - C)×ri mod(pi) C = w×qi + C 注) 前もって下記を計算(i=2,3,...,m) qi=P1P2 ...Pi-1 , ri=1/qi=qiPi-2 mod(Pi) 6 3.2 中国剰余定理の具体例(1/5) • 素数Pi(i=1,2,3,4)とqi,ri(i=2,3,4)の値 P1= 1000003, P2 = 1000033 P3= 1000037, P4 = 1000039 q2 = 1000003, q3 = 1000036,000099 q4 = 1000073,001431,003663 r2 = 233341, r3 = 551491 r4 = 682897 7 3.2 中国剰余定理の具体例(2/5) • 入力(A,B)と乗算結果(C) C=A×Bの計算 A = 123456,789012 B = 987654,321098 C = 121932,631136,585886,175176 8 3.2 中国剰余定理の具体例(3/5) • Ci = Ai×Bi mod(Pi), i=1,2,3,4の計算 C1=418644×358145=805578 mod(1000003) C2=715096×729605=400320 mod(1000033) C3=221288×779269=498340 mod(1000037) C4=974423×804113=644714 mod(1000039) 9 3.2 中国剰余定理の具体例(4/5) • i=2の計算 w = (C2 - C1)×233341 = 813535 mod(P2) C = w×q2 + C1= 813538,246183 • i=3の計算 w = (C3 - C)×551491= 730556 mod(P3) C = w×q3 + C = 730583,113632,571227 10 3.2 中国剰余定理の具体例(5/5) • i=4の計算(最終) w = (C4 - C1)×682897 = 121923 mod(P2) C = w×q4 + C = 121932,631136,585886,175176 = A×B 11 4. FFT(高速フーリエ変換)による乗算 A=(a1,...,an), B=(b1,...,bn) : n個の要素 C=A×B, C=(c1,...,c2n) : 2n個の要素 (1) A=(a1,...,an,0,...0) : n個のゼロ追加 B=(b1,...,bn,0,...,0) : n個のゼロ追加 (2) A=FFT(A), B=FFT(B) (3) C=A*B ; FFTの直交性で項別乗算 (4) C=FFT-1(C) ; C=A×Bとなる 12 4.1 整数FFTによる乗算 • 整数FFTによる乗算の特徴 (1) 計算方法は乗算原理そのまま (2) 法Pの元での1の原始n乗根ωが必要 ω1/2 = -1 mod(P) , ωn = 1 mod(P) (3) 下記条件要(hは入力要素の最大値) n×h2 < P (4) P1,P2,...,Pmを用いて重ね合わせが可能 13 4.1.1 整数FFTの係数例1 • 倍精度計算可能な1の原始n乗根 n 17 =1 mod(P) , n=2 の例 ω NO P(224程度) ω 770 149・n + 1 1 2 201 153・n + 1 3 70 155・n + 1 4 20 164・n + 1 5 1498 165・n + 1 14 4.1.2 整数FFTの係数例2 • 倍精度計算可能な1の原始n乗根 n 35 =1 mod(P) , n=2 の例 ω NO P(248程度) ω 360 8319・n + 1 1 2 933 8334・n + 1 3 1714 8549・n + 1 4 474 8755・n + 1 5 744 8759・n + 1 15 4.2 実数FFT方式 B=FFT(A), A=FFT -1(B) のとき Aが実数 ==> Bは共役複素数を利用 A : 2n個の実数 B : 共役性を利用してn個の複素数 FFT, FFT-1 ; n要素の複素FFTと同等 項別乗算(*) ; 共役性でn個の複素乗算 ==> 要素数が半分の複素FFTと同等 16 4.3 複素数FFT方式 •拡張FMT(入出力に変換を加える)から導出. ωj/4(j=0,...,n-1)の変換で下記の式が得られる. Bk = Ak + i・Ak+n , k=0,1,...,n-1 Bk : 複素拡張FFT(FMT)による乗算結果 Ak : 実FFTによる乗算結果, i: 虚数単位 ==> 入力値の虚部をゼロにした複素拡張FFT の乗算の実部が元の多数桁乗算の上位 に、虚部が下位に対応する。 17 4.4 FFTとFMT(高速剰余変換)の関係 •FFT: 高速フーリエ変換 (フーリエが発見) Fast Fourier Transformation ( ω = e 2π i / n ) 信号処理や偏微分方程式解析用に開発 乗算結果の巡回が通常乗算と異なり上位から •FMT: 高速剰余変換 (後が提案) Fast Modulo Transformation (ωは原始n乗根) 多数桁乗算用に開発(変換中の意味明確) FFTと多数桁乗算の演算量は同じ 剰余(mod)の定義に従い、巡回は下位から 18
© Copyright 2025 ExpyDoc