long double |
辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS) |
読み:ロング-ダブル |
外語:long double |
品詞:名詞 |
|
概要 |
実数型変数の型の一つ。doubleよりも更に長い浮動小数点数を宣言する。
C/C++の場合は、概ね長倍精度から四倍精度程度の浮動小数点数を表わすことが想定されている。
但し、言語仕様上はビット長は保証されておらず、
float ≦ double ≦ long double ≒ __float80 ≦ __float128
とされている。また実際、多くの実装では128ビット長にはなっていない。GCCでは4.6以降で独自に__float128型を用意した。
特徴 |
仕様 |
実装により、仕様がかなり異なる。x86環境では、doubleと同じ64ビットであったり、より大きな80ビット長が利用できることもある。
80ビットはx87つまりx86のFPUの仕様に完全対応した実装である。x87仕様は、符号部1ビット+指数部15ビット+仮数部64ビット(実質65ビット)で、指数に+16383のゲタをはかせるバイアス方式、基数2の80ビット長である。
この場合、有効桁数は10進数表現で19桁程度。GCCでは__float80という実装依存の別名を用意している。
符号 |
long doubleは浮動小数点形式で値を扱うため、整数型と異なり、常に符号ありで処理される。
したがって、signed/unsignedによる符号の有無の指定は無効で、エラーになる。
言語 |
C/C++ |
printfでは%Lfなどで表わす。
直定数の接尾辞(サフィックス)は、qまたはQである。
ANSI Cの時代より、float.hにおいて以下の9個のマクロ定数が定義されるようになった。これを利用すると、その環境での長さを得ることができる。
また最後の二つ(_から始まるもの)は標準外だが、拡張で、実装によっては存在する。
以下の例の数値は、long doubleが80ビットのBorland C++Builderの場合。但し最後の二つはBorland C++Builderに存在しない。double=long doubleであるMicrosoft Visual C/C++の値は、doubleを参照のこと。
Win64環境であってもdoubleと同じ64ビット長であり、128ビットは現時点では使用できない。
Win32環境、Win64環境共に、80ビット長である。
Microsoftの実装とは互換性がないが、この仕様でx86のFPUの機能(8087の頃から一貫して80ビット)がフルに利用出来る。
確認した範囲では、GCCは80ビット長である。
なお、sizeofで取得できるサイズは、IA-32では96ビット、x64に対応した版/環境では128ビットとなるようである。これは単にアラインメントの調整のためで、FPUの精度が向上したわけではない。
Delphi |
Delphi(Pascal)では、Extended型がほぼ相当する。
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |