円周率.jp (http://xn--w6q13e505b.jp/method/store.html)

多倍長数格納方法

この格納方法をどのようにするかによって各演算の詳細に違いが出てくるため、 演算を実装する前に決める必要がある。

多倍長整数

いろいろな点で選択肢があるので、それぞれその選択肢を表す。

桁の配置

  • $a_{n-1}R^{n-1} + a_{n-2}R^{n-2} + \cdots + a_1R + a_0$
  • $a_0R^{n-1} + a_1R^{n-2} + \cdots + a_{n-2}R + a_{n-1}$

コンピュータ業界では前者をリトルエンディアン、後者をビッグエンディアンと言う。 後者は人間の記述的にはわかりやすい一方、 前者はメモリ領域の追加をするだけで繰り上がり処理が楽になるというように 処理が簡単になりやすい。 このサイトでは前者の形をとる。

負の数の表現

  • 符号変数を持つ
  • 桁数を表現する $n$ に負の数を使う

符号変数を持つと処理の分岐が楽になるが、 $n$ に負の数を使うと使うメモリ量が少しだけ節約できる。 また、特に多倍長演算をライブラリとして提供する訳ではなければ 負の数を変数として使わない選択肢もある。

多倍長浮動小数

基本的には多倍長整数に加えて、指数を表す変数 $e$ を持てばよい。 ただ、その際に仮数部の小数点をどこに置くか(仮数部を整数として扱うか、 固定小数点数として扱うか)という程度の選択肢がある。

\[ (-1)^s\times(a_{n-1}R^{n-1}+a_{n-2}R^{n^2}+\cdots+a_1R+a_0) \times R^e \]