そもそも「多倍長」ってどういう意味?

 第1章の最初の記述がまとまらんので,ざっと書き出してみる。こんな感じでどうっすかね?>Fさん
—-
1.1 そもそも「多倍長」ってどういう意味?
 コンピュータ内部におけるデータは全て2進数(binary number),即ち,0もしくは1の並びで表現される「数値」(numerical value)である。データを格納するメモリ(memory)の大きさは制限されているので,全ての数値の長さは有限でなければならない。標準的に使用される数値の形式(format),即ちデータ型(data type)は規定されており,大別して整数(integer)型と実数型(real number)型に分類される。C/C++の標準的な整数型と実数型の変数,即ち,数値を格納するために確保されるメモリ領域を使用するために宣言するデータ型は

  • 整数型
    • 符号付き整数型(signed integer)
      • int型
      • long int型
    • 符号なし整数型(unsigned integer)
      • unsigned int型
      • unsigned long int型
  • 実数型
    • float型
    • double型

となる。現在主流の64bit CPUではint型,unsigned int型,float型が32bit長,long int型,unsigned long int型, double型が64bit長である。これらの標準的なデータ型はCPU内部のハードウェア演算回路を使用し,1命令(instruction)での高速な演算処理(arithmetic)が可能である。
 本書では,これらの標準的なデータ型を複数組み合わせ,64bitより長い数値を扱う計算全般を広義の多倍長(multiple precision)計算と呼ぶことにする。もっとも主題は多倍長の実数型を使用する数値計算(numerical computation)なので,特に断らない限り,double型より長い実数型を扱う数値計算を多倍長計算と呼ぶ。これらの多倍長計算は標準的なfloat型,double型を使用した数値計算に比べて多大な計算時間を要するのが普通である。

 ところで,本書では「多倍長」をかように定義するが,複数のデータ型を混合して計算する場合もmultiple(複数) precision(精度)と呼称しているケースもある。後述するように,現在の計算環境は標準データ型演算速度の高速化が限界に達しており,計算効率を上げるために,例えば,高速なfloat型と比較的低速なdouble型を混合させる方法も盛んである。本書で取り上げる長い実数型でも,精度は様々なものを利用することが前提となっており,その意味では「より長い精度の実数型取り混ぜで使用する数値計算」という意味合いも「多倍長計算」に込められていると解釈してもらっても構わない。
 しかし,これでは「より長い精度桁数」を利用しているかどうかは判然としないこともあるので,そこを強調したい向きには,可変精度(variable precision)計算,任意精度(arbitrary precision)計算という言葉を使用すると良い。無限精度(infinite precision)計算という言葉を使うケースもあったが,無限の精度をコンピュータで扱うことができない以上,過大表現っぽくて著者個人としては好きになれず,使用したことはない。もし見かけた時には本書で扱う多倍長計算と同一のものと考えてよい。

 以下,標準的なデータ型より長い桁数を扱う「多倍長計算」について,その便利さと困難さの実例を見ていくことにする。