四倍精度浮動小数点数

四倍精度浮動小数点形式



四倍精度浮動小数点形式とは、浮動小数点数の形式の一つで、一般的な倍精度形式と比較して、仮数部の長さが約2倍である、より高精度な数値表現です。

歴史的背景



数値計算における精度向上の必要性から、より高精度な演算が求められてきました。初期のIEEE 754規格策定時にも、将来的な高精度化を見越して、段階的な精度向上が議論されていました。計算機科学者のカハンは、10バイトの拡張倍精度が精度の価値と実装コストの妥協点であるとしつつも、将来的に16バイト形式が必要になると述べています。

IEEE 754規格における定義



IEEE 754-2008規格では、128ビットの二進形式がbinary128として正式に定義されています。

binary128 の詳細



符号: 1ビット
指数部: 15ビット
仮数部: 113ビット (明示的には112ビット)

これにより、十進数で約33桁から36桁の精度を持つ数値が表現可能です。正規化数の場合、最上位の1は暗黙的に存在するものとして省略されるため、実際にメモリに格納されるのは112ビットです。

指数



指数部は、他の精度と同様にゲタ履き表現で格納され、オフセットは16383です。実際の指数値を得るには、格納された値からオフセットを引きます。

Emin: -16382
Emax: 16383
バイアス: 16383

指数部が0の場合、ゼロまたは非正規化数を表し、最大値の場合は無限大またはNaNを表します。

値の範囲



倍精度浮動小数点数が表現できる値の範囲は以下の通りです。

最小の正の非正規化数: 約 10-4965
最小の正の正規化数: 約 3.3621 × 10-4932
最大の表現可能な値: 約 1.1897 × 104932

具体例



以下に、四倍精度浮動小数点数の具体的な表現例を示します。

`3fff 0000 0000 0000 0000 0000 0000 0000` = 1
`c000 0000 0000 0000 0000 0000 0000 0000` = -2
`7ffe ffff ffff ffff ffff ffff ffff ffff` ≈ 1.1897 × 104932 (最大値)
`0000 0000 0000 0000 0000 0000 0000 0000` = 0
`8000 0000 0000 0000 0000 0000 0000 0000` = -0
`7fff 0000 0000 0000 0000 0000 0000 0000` = 無限
`ffff 0000 0000 0000 0000 0000 0000 0000` = -無限
`3ffd 5555 5555 5555 5555 5555 5555 5555` ≈ 1/3

利用状況と課題



四倍精度は、高い精度が求められる科学技術計算などで利用されることがあります。しかし、利用者数が少ないため、標準的な言語仕様では定義されておらず、処理系による独自拡張として提供されることが一般的です。ハードウェアによるサポートも限られており、ソフトウェアによる処理では、数倍以上の速度低下を伴うことがあります。

サポート状況



言語: 標準仕様では定義されていないことが多い。独自拡張として `__float128` などの型が利用できる場合がある。GNU FORTRANはIEEE754四倍精度をサポート。
ハードウェア: ほとんどのプロセッサで倍精度までしかサポートされていない。一部のプロセッサには命令セットはあるが、ソフトウェア実装となる。
IBM: 一部のアーキテクチャではdouble-double演算による四倍精度処理をサポート。Power9ではIEEE 754四倍精度FPと十進FPをハードウェアでサポート。

double-double 演算



通常の倍精度浮動小数点数のペアを用いて、四倍精度の処理を擬似的に実現する手法です。

原理



double-double演算では、2つの倍精度数 (x, y) を用いて、一つの四倍精度数 q = x + y を表現します。各々の仮数部はqの仮数部の上下半分ずつを持ちます。この手法では、少なくとも107ビット'>[0]]6[[ビット]の仮数精度を実現できます。

特徴



仮数精度: IEEE 754のbinary128より7ビット短い106ビット以上の精度を持つ。
指数部: 倍精度と同じ11ビットであるため、表現できる値の範囲は狭い。
速度: ハードウェアで実装された倍精度演算を組み合わせるため、一般的な任意精度演算より高速。
注意点: 値の絶対値が減少すると精度も減少する。表現可能な最小値も真の四倍精度より狭い。

さらなる高精度化



double-double演算よりもさらに高い精度が必要な場合は、triple-doubleやquad-double演算を検討することもできます。

八倍精度



四倍精度よりもさらに高精度な計算のために、6倍から8倍の精度を持つフォーマットも検討されています。これらはソフトウェア実装や、FPGAなどのハードウェア実装の報告があります。

まとめ



四倍精度浮動小数点形式は、倍精度よりも高い精度を必要とする計算において有効な手段です。しかし、標準的なサポートが乏しい現状もあり、double-double演算などの代替手法が利用されることもあります。将来的な高精度化のニーズに応じて、八倍精度などのさらなる高精度なフォーマットも研究が進められています。

関連項目



コンピュータの数値表現
浮動小数点数
IEEE 754

注釈



[1]

出典



Nicholas J. Higham『Accuracy and Stability of Numerical Algorithms』(2nd.e)

外部リンク



High-Precision Software Directory
QPFloat
HPAlib
libquadmath
IEEE-754 Analysis
016/08/30/ibm-advances-against-x86-with-power9/'>IBM Advances Against x86 with Power9

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。