【C/C++】float型とdouble型の違いとは?精度・メモリ・範囲を徹底比較
C/C++では、小数点以下を含む数値(浮動小数点数)を扱うために、float型とdouble型という2つのデータ型が用意されています。どちらも浮動小数点数を表現できる点は共通していますが、「精度」の面で大きな違いがあります。
端的に言えば、double型はfloat型の約2倍の精度を持っています。これはIEEE 754浮動小数点数規格に基づくもので、double型は「倍精度」、float型は「単精度」と呼ばれます。
ビット構成と精度の違い
両者の精度をビット構成で比較すると、以下のようになります。
- double型(倍精度):64ビット構成(符号1ビット+指数部11ビット+仮数部52ビット)。10進数で約15桁の精度を持ちます。
- float型(単精度):32ビット構成(符号1ビット+指数部8ビット+仮数部23ビット)。10進数で約7桁の精度を持ちます。
メモリ使用量の違い
double型はfloat型よりも精度が高いため、必要なメモリ量も2倍になります。一般的な環境では、float型は4バイト、double型は8バイトのメモリを占有します。そのため、大量の数値データを扱うプログラムでは、このメモリ使用量の差が無視できません。
表現できる値の範囲
それぞれの型が表現できる値の範囲は以下のとおりです。
- float型:約±3.40282347E+38(有効数字6〜7桁)
- double型:約±1.79769313486231570E+308(有効数字15〜16桁)
floatとdoubleの比較一覧表
| 項目 | float型 | double型 |
|---|---|---|
| サイズ | 32ビット(4バイト) | 64ビット(8バイト) |
| 有効桁数 | 約7桁 | 約15桁 |
| 値の範囲 | 約±3.4E+38 | 約±1.8E+308 |
どちらを使うべきか?
以上の点を踏まえると、使い分けの指針は次のとおりです。
float型が適しているケース:高い精度が不要で、大量の小数データを配列などに格納する場合です。float型を選ぶことでメモリを節約でき、コスト効率の良いデータ管理が可能になります。ゲームのグラフィックス処理や組み込みシステムなど、メモリと処理速度が重視される場面でよく使われます。
double型が適しているケース:より高い精度が求められる場合です。科学技術計算、金融計算、シミュレーションなど、誤差を最小限に抑えたい処理ではdouble型が推奨されます。
なお、近年のCPUではdouble型の演算性能も十分に高く、パフォーマンスの差はほとんど問題にならないため、特別な理由がなければdouble型をデフォルトとして選ぶのが一般的です。
-
【C/C++】const int* と int* const の違いを徹底解説!宣言の読み方のコツも紹介
はじめに:constとポインタの組み合わせ C/C++では、「const」と「ポインタ」を組み合わせた宣言が複数存在し、それぞれ意味が異なるため、初心者がつまずきやすいポイントの一つです。この記事では、代表的な4つのパターンを整理し、何が変更できて何が変更できないのかを具体例とともに解説します。 4つの基本パターン int* // intへのポインタ int const * // constなintへのポインタ int * const // intへのconstポインタ int const * const // con
-
C#のfloat・double・decimalの違いを徹底解説!精度・範囲・メモリサイズの比較と使い分け
C#には、小数点を含む数値を扱うためにfloat(浮動小数点型)、double(倍精度浮動小数点型)、decimal(10進数型)の3つの型が用意されています。これらはすべてC#における値型(Value Type)に分類されます。 値型の変数には、値を直接代入することができます。これらの型はすべて System.ValueType クラスから派生しており、変数自体がデータを直接保持するという特徴があります。 一見似ているこの3つの型ですが、精度・表現できる範囲・メモリサイズが異なるため、用途に応じた使い分けが重要です。以下、それぞれの特徴を詳しく見ていきましょう。 float型(単精度浮動小数