先頭へ戻る

浮動小数点型の最小値・最大値を得る | Programming Place Plus C言語編 逆引き

Programming Place Plus トップページ -- C言語編 -- 逆引き

先頭へ戻る

この章の概要

この章の概要です。

目的

ある浮動小数点型で表現できる最小値や最大値を使いたいとします。

たとえば、double型の変数を定義するとき、表現できる最小値や最大値で初期化したい場合、どのように書けるでしょうか。

double min = ???;  // double型の最小値
double max = ???;  // double型の最大値

方法①(標準ライブラリのマクロを使う)

浮動小数点型の最大値を定義したマクロが、標準ライブラリに用意されていますから、それを使います。

これらのマクロは float.h で定義されています。

すべてではありませんが、代表的なものを以下に挙げます。

最大値マクロ
float FLT_MAX
double DBL_MAX
long double LDBL_MAX

最小値を定義したマクロは存在しません。代わりに、最大値マクロの置換結果に「-」を付加することで最小値を得ます。しかし、FLT_MINDBL_MINLDBL_MIN という名前のマクロは、別のことを意味するマクロとして存在していることに注意が必要です。

FLT_MIN、DBL_MIN、LDBL_MIN は、それぞれの浮動小数点型で、正確に表現することができる最小の "正の値" を意味しています。これらのマクロは、丸められてしまうことなく、正確に表現できる最小の値を調べるためにあります(「丸め」については第20章参照

#include <float.h>
#include <stdio.h>

int main(void)
{
    float fMin = -FLT_MAX;
    float fMax = FLT_MAX;
    double dMin = -DBL_MAX;
    double dMax = DBL_MAX;
    long double ldMin = -LDBL_MAX;
    long double ldMax = LDBL_MAX;

    printf("%e %e\n", fMin, fMax);
    printf("%e %e\n", dMin, dMax);
    printf("%Le %Le\n", ldMin, ldMax);

    return 0;
}

実行結果:

-3.402823e+38 3.402823e+38
-1.797693e+308 1.797693e+308
-1.797693e+308 1.797693e+308


参考リンク


更新履歴



逆引きのトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー