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

トップページC言語編逆引き

このページの概要 🔗

このページの解説は C99 をベースとしています

以下は目次です。

目的 🔗

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

たとえば、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 f_min = -FLT_MAX;
    float f_max = FLT_MAX;
    double d_min = -DBL_MAX;
    double d_max = DBL_MAX;
    long double ld_min = -LDBL_MAX;
    long double ld_max = LDBL_MAX;

    printf("%e %e\n", f_min, f_max);
    printf("%e %e\n", d_min, d_max);
    printf("%Le %Le\n", ld_min, ld_max);
}

実行結果:

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


参考リンク 🔗


更新履歴 🔗



逆引きのトップページへ

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る