【C言語入門】浮動小数点数(double・float)の使い方

double型やfloat型って使ってますか?小数点を含む数値を扱う場合に使いますよね。この記事では、double型、float型について浮動小数点数型についてという基本的な内容から、

  • double型について
  • float型について

などそれぞれの型の詳しい内容についても解説していきます。今回はdouble型、float型について、使い方をわかりやすく解説します!

目次

浮動小数点数型について

浮動小数点数型とは、小数を扱うデータ型のことです。浮動小数点数は符号部と固定長の仮数部と固定長の指数部を持ちます。数値の絶対値は以下のように定義されます。

仮数 × 基数の指数乗

基数は固定されているので、仮数と指数によって小数の絶対値が決まります。浮動小数点数には単精度浮動小数点数と倍精度浮動小数点数があり、単精度浮動小数点数がfloat型、倍精度浮動小数点数がdouble型になります。

float型のサイズは4バイトつまり32ビットで、符号部に1ビット、仮数部に23ビット、指数部に8ビットを使用しています。

double型のサイズは8バイトつまり64ビットで、符号部に1ビット、仮数部に52ビット、指数部に11ビット使用しています。指数部で表現できる範囲を超える場合があります。

指数の最大値を超える場合はオーバーフロー、絶対値の最小より小さい場合はアンダーフローといいます。範囲を超えて意図しない値で扱われることのないように注意しましょう。double型およびfloat型の最大値や最小値については後ほど詳しく説明します。

double型について

double型の変数は次のようにして定義します。

double型の変数および初期化:

double 変数名 = 数値(小数点含む);

また、代入する数値は指数表記で記述することもできます。

数値の指数表記:

仮数e指数

double型のサイズは8バイトで、絶対値の最大値は1.797693e+308、最小値は2.225074e-308となります。printf関数などを使って出力表示する際の変換指定子は「lf」(long float)になります。

また、指数表示で出力表示する際の変換指定子は「le」、最適な形式で出力表示する際の変換指定子は「lg」になります。それではサンプルコードで確認していきましょう。

#include <stdio.h>
#include <float.h>
 
int main(void) {
    double pi = 3.14159265359;
    // double型の変換指定子はlf
    printf("double型変数piの値: %lf\n", pi);
    // double型の最適標記の変換指定子はlg
    printf("double型変数piの値の最適表記: %lg\n", pi);
    
    double micro = 1.0e-6;
    // double型の指数表記の変換指定子はle
    printf("1ミクロンは%le\n", micro);
    // double型の最適標記の変換指定子はlg
    printf("1ミクロンは%lg\n", micro);
    
    double d_min = DBL_MIN; // double型の数値の最小値
    double d_max = DBL_MAX; // double型の数値の最大値
 
    // double型のサイズおよび最小値、最大値    
    printf("double型のバイト数は%ldバイト\n", sizeof(d_min));
    printf("double型の数値の正の最小値: %le\n", DBL_MIN);  
    printf("double型の数値の最大値: %le\n", DBL_MAX);
 
    return 0;
}

実行結果:

double型変数piの値: 3.141593
double型変数piの値の最適表記: 3.14159
1ミクロンは1.000000e-06
1ミクロンは1e-06
double型のバイト数は8バイト
double型の数値の正の最小値: 2.225074e-308
double型の数値の最大値: 1.797693e+308

このサンプルコードではdouble型の変数「pi」と「micro」を定義し、変換指定子「lf」、「le」、「lg」を使って出力表示しています。また、ヘッダーファイル「float.h」で定義された定数「DBL_MIN」、「DBL_MAX」を使ってdouble型の数値の絶対値の最小値、最大値を出力表示しています。

float型について

float型の変数は次のようにして定義します。

float型の変数および初期化:

float 変数名 = 数値(小数点含む)f;

float型の変数に数値を代入する場合は数値の後にf(F)を付けてfloat型の代入であることを明示します。また、代入する数値は指数表記で記述することもできます。

数値の指数表記:

仮数e指数f

float型のサイズは4バイトで、絶対値の最大値は3.402823e+38、最小値は1.175494e-38となります。

printf関数などを使って出力表示する際の変換指定子は「f」になります。また、指数表示で出力表示する際の変換指定子は「e」、最適な形式で出力表示する際の変換指定子は「g」になります。それではサンプルコードで確認していきましょう。

#include <stdio.h>
#include <float.h>
 
int main(void) {
    float pi = 3.14159265359f;
    // float型の変換指定子はf
    printf("float型変数piの値: %f\n", pi);
    // float型の最適標記の変換指定子はg
    printf("float型変数piの値の最適表記: %g\n", pi);
    
    float micro = 1.0e-6f;
    // float型の指数表記の変換指定子はe
    printf("1ミクロンは%le\n", micro);
    // float型の最適標記の変換指定子はg
    printf("1ミクロンは%lg\n", micro);
    
    float f_min = FLT_MIN; // float型の数値の最小値
    float f_max = FLT_MAX; // float型の数値の最大値
 
    // float型のサイズおよび最小値、最大値    
    printf("float型のバイト数は%ldバイト\n", sizeof(f_min));
    printf("float型の数値の正の最小値: %e\n", FLT_MIN);  
    printf("float型の数値の最大値: %e\n", FLT_MAX);
 
    return 0;
}

実行結果:

float型変数piの値: 3.141593
float型変数piの値の最適表記: 3.14159
1ミクロンは1.000000e-06
1ミクロンは1e-06
float型のバイト数は4バイト
float型の数値の正の最小値: 1.175494e-38
float型の数値の最大値: 3.402823e+38

このサンプルコードではfloat型の変数「pi」と「micro」を定義し、変換指定子「f」、「e」、「g」を使って出力表示しています。また、ヘッダーファイル「float.h」で定義された定数「FLT_MIN」、「FLT_MAX」を使ってfloat型の数値の絶対値の最小値、最大値を出力表示しています。

まとめ

ここでは、double型、float型について説明しました。

double型、float型などの浮動小数点数型は符号および仮数と指数を使って表しますが、指数の最大値や絶対値の最小値を超えて意図しない値で扱われることのないように注意しましょう。

使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次