長倍精度
読み:ちょうばいせいど
外語:long double

 コンピューター内部における数値表現の方法の一つで、浮動小数点数の表現で用いられる。特定の呼称がなく、長倍精度、拡張倍精度、long doubleなど、様々に呼ばれている。
目次

概要
 x87、つまりx86FPU機能は、初期の8087の頃から現在まで、一貫して80ビット長の精度を持っている。
 この精度を完全に利用するためには、Microsoft Windows用のC/C++実装で一般的な64ビット長の倍精度(double型変数)では足らないため、さらに長い表現が必要である。
 四倍精度(128ビット)までは不要ながらこのx87の仕様である80ビット長を扱う必要が生じ、このため用意されたのが中間となる長さを持った長倍精度である。

特徴

仕様
 Intel FPUの仕様においては、符号部1ビット、指数部15ビット(+16383のゲタをはかせるバイアス方式)、仮数部64ビット(基数2)の80ビット長である。但し後述するように仮数部は実質81ビットであり、有効桁数は10進数表現で19桁程度となる。

仮数部
 80ビットの中に収められる仮数部の長さは64ビットだが、実際にはこの精度は65ビットとされている。
 これは、0/NaN/∞などを除いて、正規化により「1.」の部分を暗黙的に定義することでビット数を稼ぎ、都合65ビットとしているためである。この「1.」は、「暗黙の整数ビット」や「implicit」などと呼ばれている。
 「1.」が存在するが、0は0で別途、指数部=仮数部=0の場合に0として定義されており、表現することが可能である。

プログラミング
 C/C++ではlong double型の変数を用いる。GCCclang/LLVMで対応するが、Visual C++では完全対応していない。GCC独自拡張で__float80型が存在する。
 Javaには該当する型がない。Javaではjava.math.BigDecimalクラスが存在するが、長倍精度と対応するものではない。

再検索