=================================================================== RCS file: /home/cvs/OpenXM/doc/compalg/num.tex,v retrieving revision 1.1.1.1 retrieving revision 1.3 diff -u -p -r1.1.1.1 -r1.3 --- OpenXM/doc/compalg/num.tex 2000/03/01 02:25:51 1.1.1.1 +++ OpenXM/doc/compalg/num.tex 2000/10/03 01:44:03 1.3 @@ -1,3 +1,4 @@ +%$OpenXM: OpenXM/doc/compalg/num.tex,v 1.2 2000/03/28 02:02:30 noro Exp $ \chapter{整数} \section{整数の表現} @@ -154,6 +155,16 @@ $$ t=w_{i+j}+u_iv_j+c \le (B-1)+(B-1)^2+B-1 = B^2-1$$ 2 $B7e$N?t$G$"$k. よって $t_h$, $t_l$ は $B$ 進 1 桁となり, 帰納的に, $w_{i+j}$, $c$ が常に $B$ 進 1 桁となることが分かる. ただし, $u_iv_j$ の計算には倍精度整数乗算が必要となる. + +このアルゴリズムでは, 入力の桁数の積 $mn$ に比例する手間がかかる. 桁数 +の大きい数の積の手間を減らす工夫として Karatsuba 法およびFFT 法がある. +これらのうち, 多項式に関する Karatsuba 法についてはSection \ref{kara} +で述べるが, 整数に対しても全く同様のアルゴリズムが適用できる. ($B$ 進 +整数は, $B$ に関する多項式とみなせることに注意.) 一般に, Karatsuba 法 +はいくらかの overhead を伴うため, 実際には, ある桁数 (しきい値) +を設定して, しきい値以上の桁数では Karatsuba 法, それ以下ではここで述 +べたアルゴリズムを適用することで, さまざまな桁数の数に対して高速な +実装が得られる. \section{除算} 整数除算も基本は筆算と同様で, 商の上位の桁から求めていく.