long double

読み:ロング・ダブル
外語:long double
品詞:名詞

C/C++/Javaなどの予約語の一つ。

実数型変数の型の一つ。doubleよりも更に長い整数を宣言する。

C/C++の場合は倍々精度(概ね16バイト≒128ビット)の浮動小数点を表わす。

但し、言語仕様上はビット長は保証されておらず、

floatdoublelong double

とされている。

主な実装

Microsoft Visual C++ 2003環境では、Win64環境であってもdoubleと同じ64ビット長の倍精度であり、128ビットは現時点では使用できない。

Borland Developer Studio 2006のBorland C++Builderでは、Win32環境、Win64環境共に、80ビット長の精度である。上のMicrosoftと互換性がないが、この仕様でx86のFPUの機能(8087の頃から一貫して80ビット)がフルに利用出来る。

gccでは、IA-32では96ビットだが、AMD64 ISAに対応した版/環境では128ビットとなるようである。これは、AMD PhenomからFPUが128ビットに拡張されたことに対応したためと見られる。

マクロ定数

ANSI Cの時代より、float.hにおいて以下の9個のマクロ定数が定義されるようになった。これを利用すると、その環境での長さを得ることができる。

また最後の二つ(_から始まるもの)は標準外だが、拡張で、実装によっては存在する。

以下の例の数値は、long doubleが80ビットのBorland C++Builderの場合。但し最後の二つはBorland C++Builderに存在しない。double=long doubleであるMicrosoft Visual C/C++の値は、doubleを参照のこと。

LDBL_DIG
10進数精度 (例えば18)
LDBL_EPSILON
1.0+DBL_EPSILON != 1.0 となる最小値 (例えば1.084202172485504434e-019L)
LDBL_MANT_DIG
仮数ビット長 (例えば53)
LDBL_MAX
最大値 (例えば1.189731495357231765e+4932)
LDBL_MAX_10_EXP
最大10進指数 (例えば+4932)
LDBL_MAX_EXP
最大2進指数 (例えば+16384)
LDBL_MIN
最小値 (例えば3.36210314311209351e-4932)
LDBL_MIN_10_EXP
最小10進指数 (例えば-4931)
LDBL_MIN_EXP
最小2進指数 (例えば-16381)
_LDBL_RADIX
指数の基数 (例えば2)
_LDBL_ROUNDS
丸めモード (例えば1)

Delphi(Pascal)では、Extended型がほぼ相当する。