Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

double型(ダブルガタ)とは | 意味や読み方など丁寧でわかりやすい用語解説

double型(ダブルガタ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ダブル型 (ダブルガタ)

英語表記

double (ダブル)

用語解説

double型は、プログラミングにおいて小数点以下の値、つまり実数を扱うためのデータ型の一つである。一般的に「倍精度浮動小数点数型」と呼ばれることが多い。主に科学技術計算、金融計算、物理シミュレーションなど、非常に広範囲な数値と高い精度が要求される場面で利用される。整数型が小数点以下の情報を保持できないのに対し、double型は例えば3.14159や-0.0000123といった数値を正確ではないにしても、十分な精度で表現できるのが特徴だ。コンピュータのメモリ上では通常64ビット(8バイト)の領域を占有し、これにより単精度浮動小数点数型であるfloat型(通常32ビット)よりも広い範囲の数値と、高い精度を表現することを可能にしている。

double型が表現できる値の範囲は非常に広く、正負の無限大に近い値から、ゼロに近い極めて小さな値までを扱える。具体的には、およそ±1.79769e+308から±4.94066e-324までの範囲の数値を表現できる。この「e+308」や「e-324」は、10の308乗や10の-324乗を意味し、桁数の多さを示している。また、その精度は十進数で約15〜17桁の有効数字を持つ。この高い精度は、計算過程で発生する誤差を最小限に抑え、より正確な結果を得る上で重要となる。

コンピュータ内部でdouble型の数値は、国際標準であるIEEE 754浮動小数点数標準形式に基づいて表現される。この標準では、数値を「符号部」「指数部」「仮数部」の3つの要素に分解して表現する。64ビットのdouble型の場合、一般的に1ビットが符号部に、11ビットが指数部に、残りの52ビットが仮数部に割り当てられる。

符号部は数値が正か負かを示す。0であれば正、1であれば負を表す。指数部は、数値の大きさを大まかに示す部分で、表現可能な範囲を決定する。例えば、10進数の科学的表記における「10のn乗」の「n」に相当する役割を二進数で果たす。11ビットの指数部では、-1022から+1023までの範囲の指数を表現できるよう、バイアス値(通常1023)を加えて符号なし整数として格納される。これにより、指数部自体が正の値のみを保持しつつ、負の指数も間接的に表現できる。

仮数部は、数値の具体的な精度、つまり有効数字の部分を表す。浮動小数点数は通常「正規化」された形で表現されるため、仮数部の最上位ビットは常に1(隠れビット)であると見なされ、実際に格納されるのはその後のビット列となる。これにより、1ビット分の情報量を節約し、実質的に53ビット分の有効数字を表現できる。この53ビットの二進数精度が、十進数での約15〜17桁という有効桁数に相当する。

float型(単精度)と比較すると、double型はその2倍のビット数を持つため、表現できる数値の範囲も精度も格段に優れている。例えば、float型が十進数で約7桁程度の精度しか持たないのに対し、double型は約15〜17桁の精度を持つ。この差は、複雑な計算や反復計算において誤差が蓄積する際に顕著に現れる。計算回数が増えるほど、float型では最終的な結果が大きくずれてしまう可能性があるが、double型ではより信頼性の高い結果を得られる。そのため、数値計算を伴うほとんどのアプリケーションでdouble型が推奨されるのは、この高精度が必要不可欠だからである。

ただし、浮動小数点数、特にdouble型を使用する際にはいくつかの注意点がある。まず、コンピュータ内部では数値を二進数で表現するため、0.1のような十進数の値であっても、完全に正確な二進数表現ができない場合がある。これは、1/3が循環小数になるのと同様の原理で、結果としてごくわずかな誤差(丸め誤差)が生じる可能性がある。例えば、0.1 + 0.2 の結果が厳密に 0.3 にならないといった現象が起こりうる。

この丸め誤差の特性から、浮動小数点数の等値比較、つまり == 演算子を使った直接的な比較は避けるべきである。例えば、a == b のような比較を行うと、本来等しいはずの ab が、微細な誤差のために異なると判断されてしまうことがある。代わりに、|a - b| < epsilon のように、二つの値の差が許容できる非常に小さな値(イプシロン)よりも小さいかどうかで比較する手法が一般的に用いられる。

また、double型は非常に大きな値や小さな値を扱えるが、これらの範囲を超えた場合、「オーバーフロー」(表現可能な最大値より大きい値)や「アンダーフロー」(表現可能な最小値より小さい、ゼロに近い値)が発生する。オーバーフローすると無限大 (Infinity) として扱われたり、アンダーフローするとゼロとして扱われたりする。さらに、0.0 / 0.0sqrt(-1.0) のように数学的に不定な演算結果は、「非数 (NaN: Not a Number)」として表現される。これらの特殊な値の挙動を理解しておくことは、プログラムの予期せぬ動作を防ぐ上で重要だ。

厳密な十進数精度が求められる金融計算など、ごくわずかな誤差も許容されない場面では、double型ではなく、Decimal型やBigDecimal型といった、十進数をそのまま内部で表現する専用のデータ型を使用することが推奨される。これらはメモリ消費量や計算速度の面でdouble型に劣るものの、誤差を発生させずに正確な十進数計算を行える。

プログラミングにおいて、整数値だけを扱う場合はint型やlong型を、小数点以下の値を扱う場合は、特別な理由がない限りdouble型を選択するのが一般的なベストプラクティスである。これにより、多くの計算で十分な精度と広い範囲を確保しつつ、必要に応じてメモリ消費量や性能とのバランスを考慮したデータ型の選択が可能になる。double型は、現代のソフトウェア開発において不可欠な基本データ型の一つであり、その特性を正しく理解することは、堅牢で正確なプログラムを構築するために極めて重要だ。

関連コンテンツ

関連ITニュース

関連プログラミング言語