double-double演算
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/16 15:22 UTC 版)
「四倍精度浮動小数点数」の記事における「double-double演算」の解説
通常の倍精度浮動小数点形式のペアを用いて、四倍精度による処理を擬似的に実現する手法がある。その手法を「double-double演算」などといい、またそれによって擬似的に実現されている四倍精度が「擬似四倍精度」などと言われることがある。 真の四倍精度計算とは異なり、仮数53ビットのIEEE倍精度数の1対を用いることで、double-double演算は少なくとも2×53=106ビットの仮数(もしくは可能性としては符号ビットの巧妙な扱いにより107ビット)を実現する計算手法である。これはIEEEのbinary128の113ビットの仮数よりも7ビット短いだけである。一方、指数部は11ビットのままであるので、表現できる値の大きさの範囲は基本的に倍精度と同じである。これは四倍精度の指数部が15ビットであることに比べて格段に劣る(double-doubleの 1.8 × 10 308 {\displaystyle 1.8\times 10^{308}} に対し、binary128は 1.2 × 10 4932 {\displaystyle 1.2\times 10^{4932}} )。具体的には、double-double/四倍精度の値qをdouble-doubleの技術で表す場合、2つの倍精度数xとyの対を用いてq=x+yという和の形で表現する。この各々の仮数部はqの仮数部の上下半分ずつを持つ。つまり、qの代わりに(x,y)という対で格納されており、qに対する演算(加減乗除等)はxとyに対する等価な(ただし複雑な)演算に変換される。これにより、四倍精度の演算は(複数の)倍精度の演算の組み合わせに還元される。倍精度演算は多くの場合ハードウェアとして実装されているため、double-double演算は通常は、一般の任意精度演算よりは十分に高速である。なお、double-double演算には次のような特徴がある。 値の絶対値が減少すると、追加の精度も減少する。そのため、正規化数の範囲での最小の数は倍精度よりも狭い。完全な精度を持つ最小の数は1000...02 (ゼロが106個) × 2−1074、あるいは 1.000...02 (ゼロが106個) × 2−968である。 実際の精度は変化する。一般に、対の下位パートの絶対値は上位パートのULPの半分を超えない。下位パートが上位パートのULPの半分より小さいならば、上位と下位の仮数の間に黙示的な全0あるいは全1のビットが存在する。仮数のビット数が固定であることに依存するアルゴリズムは128ビット長の倍精度数を使うとき失敗する可能性がある。 上の理由により、1 + 2−1074のような値を表現する事ができる。これは1よりも大きい最小の表現可能な値である。 更に高い精度が要求されるならば、triple-double(159または161ビット精度)やquad-double(212または215ビット精度)演算を考えることもできる。 同様の手法で2つの四倍精度数からなるdouble-quad演算を考えることもできる。これは少なくとも226または227ビットの精度を持つ。
※この「double-double演算」の解説は、「四倍精度浮動小数点数」の解説の一部です。
「double-double演算」を含む「四倍精度浮動小数点数」の記事については、「四倍精度浮動小数点数」の概要を参照ください。
- double-double演算のページへのリンク