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

倍精度浮動小数点数型(バイドゥオフドウジョウテン スウガタ)とは | 意味や読み方など丁寧でわかりやすい用語解説

倍精度浮動小数点数型(バイドゥオフドウジョウテン スウガタ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

倍精度浮動小数点数型 (バイホドフロウチョウイッタン)

英語表記

double-precision floating-point type (ダブルプレシジョンフロウティングポイントタイプ)

用語解説

倍精度浮動小数点数型は、コンピューターが小数を扱うためのデータ型の一つで、特に高い精度と広い範囲の数値を表現する際に用いられる。これは、単精度浮動小数点数型(32ビット)と比較して、2倍のビット数(通常64ビット)を使って数値を表現することから「倍精度」と呼ばれる。単精度が約7桁の10進数精度であるのに対し、倍精度は約15〜17桁の精度を持つため、より正確な計算が求められる科学技術計算、シミュレーション、グラフィックス、金融計算、物理学、工学などの分野で広く利用されている。コンピューターにおける数値表現は、整数型と浮動小数点数型に大別され、浮動小数点数型は小数点以下の数や非常に大きな数、非常に小さな数を効率的に表現する仕組みを提供している。

浮動小数点数型の数値は、一般的にIEEE 754という国際標準に基づいて、符号部、指数部、仮数部の三つの要素に分けて表現される。この仕組みにより、小数点位置が固定されず「浮動」するため、非常に広範囲の数値を表現できる。

詳細を見ていこう。倍精度浮動小数点数型は、合計64ビットのメモリ領域を使って数値を表現する。この64ビットは次のように割り当てられる。

まず1ビットが符号部に割り当てられる。これは数値が正であるか負であるかを判別するために使われる。通常、0が正の数を、1が負の数を表す。

次に11ビットが指数部に割り当てられる。指数部は、数値の「桁」の大きさを決定する部分であり、小数点の位置をどのくらい移動させるかを示す。例えば、1.23 × 10^5 の場合、5が指数にあたる。11ビットの指数部により、非常に広い範囲の数値を表現できる。具体的には、約10の-308乗から10の308乗までの数値をカバーすることが可能だ。

残りの52ビットが仮数部に割り当てられる。仮数部は数値の「有効数字」の部分を表す。例えば、1.23 × 10^5 の場合、1.23が仮数にあたる。IEEE 754標準では、仮数部の最上位ビットが常に1であると仮定されるため、この1ビットは実際に格納されず、「暗黙の1」として扱われる。これにより、実質的には53ビット分の精度を持つことになる。この53ビットの仮数部が提供する精度は、約15〜17桁の10進数に相当する。これは、単精度の約7桁と比較して格段に高い精度であり、誤差を最小限に抑えたい場合に非常に有効だ。

倍精度浮動小数点数型は、その高い精度と広い表現範囲という利点を持つ一方で、いくつかのトレードオフも存在する。最大の欠点は、単精度浮動小数点数型に比べて2倍のメモリを消費することだ。また、一部の処理系や特定のアーキテクチャにおいては、倍精度演算が単精度演算よりも処理速度が遅くなる場合がある。しかし、現代の多くの汎用CPUは倍精度演算を効率的に実行できるよう設計されており、一般的な用途では速度的なボトルネックになることは少ない。それでも、特に組み込みシステムや大規模な並列計算(GPUなど)でメモリ帯域や計算リソースが厳しく制限される場合、単精度が選択されることもある。

浮動小数点数型全般に言える重要な注意点として、「誤差」の問題がある。コンピューターは数値を2進数で表現するため、10進数で正確に表現できる一部の小数が、2進数では無限小数となってしまうことがある。例えば、10進数の0.1は2進数では無限小数になるため、コンピューター内部では完全に正確には表現できない。このため、表現できる桁数に丸めが発生し、わずかな誤差(丸め誤差)が生じる。この誤差は、連続した計算を行うことで累積し、予期しない結果を招く可能性がある。

例えば、0.1 + 0.2の結果が厳密に0.3とならない場合や、A - B == 0という厳密な等値比較が意図した通りに機能しない場合がある。そのため、浮動小数点数型を扱うプログラムでは、厳密な等値比較を避け、代わりに「ある微小な許容範囲内にあるか」という比較を行うのが一般的だ。また、非常に大きな数と非常に小さな数を足し合わせる際に、小さい方の数が無視されてしまう「桁落ち」や「情報落ち」といった現象も発生しうる。これらの特性を理解し、適切に数値を扱うことがシステムエンジニアにとって非常に重要だ。

プログラミング言語においては、C言語やC++ではdouble型として、Javaではdouble型として、Pythonでは通常float型が倍精度浮動小数点数を指す。これらの型を適切に選択し、浮動小数点数の特性を考慮したプログラミングを行うことで、計算の正確性を確保できる。

関連コンテンツ