四倍精度浮動小数点数四倍精度浮動小数点形式(よんばいせいどふどうしょうすうてん、英語: quadruple-precision floating-point format)は、浮動小数点数の形式の1つで、よく使われている通常の倍精度形式と比して、仮数部の長さが約2倍である。 Nicholas J. Higham『Accuracy and Stability of Numerical Algorithms』(2nd.e)が、カハンの言として引用している文によれば、
とのことである。(編注: 英語版Wikipediaが孫引きしている。英語版Wikipediaの引用元が示している引用元は「W. Kahan. Computer benchmarks versus accuracy. Draft manuscript, June 1994.」となっている) IEEE 754-2008では、128ビットの二進フォーマットが公式にbinary128として定義された。次に示す。 IEEE 754 四倍精度二進浮動小数点フォーマット: binary128IEEE 754-2008は四倍精度二進浮動小数点フォーマットbinary128を以下のように定めている。 これは十進換算で33桁〜36桁に相当する(十進小数→binary128→十進小数のラウンドトリップが可能な最大桁数が33桁、binary128→十進小数→binary128のラウンドトリップが可能な最大桁数が36桁[2])。 このフォーマットは、正規化数の場合は最上位の1が暗黙のうちに存在するものとして省略される(いわゆるケチ表現)。これにより113ビット(十進換算約34桁: )の精度の仮数部の112ビットのみがメモリフォーマット上に現れる。ビットの配置は次のようになっている。 指数部他の精度の場合と同様に、指数はゲタ履き表現(IEEE 754ではexponent bias)で、オフセットは16383である。特別な場合(後述)についても基本的に他と同様である。
ゲタ履き表現なので、実際の指数を得るには、ビットパターンによる表現からオフセットの16383を引く。 指数部が000016と7FFF16の場合は特別な場合で、それぞれ、ゼロ・非正規数、無限大・NaNの表現である。
値の範囲最小の真に正の値(非正規化数)は2−16493 ≈ 10−4965であり、1ビットの精度である。 最小の正の正規化数は2−16382 ≈ 3.3621 × 10−4932であり、112ビットの精度がある。 最大の表現可能な値は216384 − 216272 ≈ 1.1897 × 104932である。 仮数部TBD 例ここでは十六進で表現する。符号、(バイアスされた)指数、仮数の、全てを含んでいる。 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.189731495357231765085759326628007 × 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 = infinity ffff 0000 0000 0000 0000 0000 0000 0000 = −infinity 3ffd 5555 5555 5555 5555 5555 5555 5555 ≈ 1/3 デフォルトでは、1/3は倍精度と同様、切り捨てられる。これは仮数のビット数が奇数であるため、丸め位置以降のビット列が サポート四倍精度をサポートする処理系やアーキテクチャについて述べる。 利用者数が極めて少ないためか、利用環境は整っているとは言い難い現状がある。まず、処理系の独自拡張としての実装は存在するが、標準の言語仕様では四倍精度が定義されていない(独自拡張は、可搬性(portability)が必要な場合は利用できない)。マイクロプロセッサのハードウェアサポートは、携帯端末用は無論パーソナルコンピュータ用やサーバ用を含めほとんどが、倍精度までであり、ソフトウェアによる処理は一般に数倍以上遅い。 一部の処理系や、64ビットアーキテクチャの場合にC言語で IBMのアーキテクチャには、次節で述べるdouble-doubleの原理による四倍精度の扱いをサポートしているものがある。また、IBM Power9 (POWER ISA3.0)では、IEEE 754 の4倍精度FPと4倍精度十進FPをサポートした。 命令セットとしては用意があるがハードウェアでのサポートが無く、ソフトウェア実行になるというプラットフォームもある。たとえばSPARC-V9には四倍精度浮動小数点演算の命令があるが、2012年現在これをハードウェアで実装したSPARCの実機は無く、ソフトウェアで実行される。 専用計算機等での実装例の報告は少なくない。たとえばGRAPE-MPのように多倍長精度に特化した設計などもある。 (SSEでは128ビット長のレジスタを対象として浮動小数点演算を行うが、複数の単精度や倍精度演算を同時に行う機能のみで四倍精度演算のサポートはない。次節のdouble-doubleの実装に使用されることがある) double-double演算通常の倍精度浮動小数点形式のペアを用いて、四倍精度による処理を擬似的に実現する手法がある[3][4][5]。その手法を「double-double演算」などといい、またそれによって擬似的に実現されている四倍精度が「擬似四倍精度」などと言われることがある。 真の四倍精度計算とは異なり、仮数53ビットのIEEE倍精度数の1対を用いることで、double-double演算は少なくとも[3]2×53=106ビットの仮数(もしくは可能性としては符号ビットの巧妙な扱いにより107ビット[6])を実現する計算手法である。これはIEEEのbinary128の113ビットの仮数よりも7ビット短いだけである。一方、指数部は11ビットのままであるので、表現できる値の大きさの範囲は基本的に倍精度と同じである[3]。これは四倍精度の指数部が15ビットであることに比べて格段に劣る(double-doubleのに対し、binary128は)。 具体的には、double-double/四倍精度の値qをdouble-doubleの技術で表す場合、2つの倍精度数xとyの対を用いてq=x+yという和の形で表現する。この各々の仮数部はqの仮数部の上下半分ずつを持つ[4]。つまり、qの代わりに(x,y)という対で格納されており、qに対する演算(加減乗除等)はxとyに対する等価な(ただし複雑な)演算に変換される。これにより、四倍精度の演算は(複数の)倍精度の演算の組み合わせに還元される。倍精度演算は多くの場合ハードウェアとして実装されているため、double-double演算は通常は、一般の任意精度演算よりは十分に高速である[4][3]。 なお、double-double演算には次のような特徴がある[7]。
更に高い精度が要求されるならば、triple-double(159または161ビット精度)やquad-double(212または215ビット精度)演算を考えることもできる。 同様の手法で2つの四倍精度数からなるdouble-quad演算を考えることもできる。これは少なくとも226または227ビットの精度を持つ。[8] 八倍精度四倍精度より精度が高く、任意精度演算より高性能な計算のためのフォーマットとして、6倍から8倍までの精度が検討されており[9][10]、いくつかの方式によるソフトウェアによる実装の報告[11][12][13][14]、GRAPE-MP 4/6/8の試作や、FPGAへの実装[12]といったハードウェアの報告などがある。 関連項目
注釈
出典
外部リンク
Information related to 四倍精度浮動小数点数 |