【C言語】float.hを使って浮動小数点数に関する限界値や精度を調整【標準ライブラリ】
目次
float.hとは何か
C言語の `
例えば、異なるCPUやコンパイラでは `float` や `double` の精度や範囲が異なるため、 `float.h` を使うことで移植性の高いコードを実現できます。
float.hが提供する定数
`
1. 型ごとの最小値・最大値
FLT_MIN
: `float` 型の最小正規化可能値FLT_MAX
: `float` 型の最大値DBL_MIN
: `double` 型の最小正規化可能値DBL_MAX
: `double` 型の最大値LDBL_MIN
: `long double` 型の最小正規化可能値LDBL_MAX
: `long double` 型の最大値
2. 有効桁数
FLT_DIG
: `float` 型の有効桁数DBL_DIG
: `double` 型の有効桁数LDBL_DIG
: `long double` 型の有効桁数
3. マシンイプシロン (Machine epsilon)
マシンイプシロンとは、その型で区別できる最小の値の違いを示します。
FLT_EPSILON
: `float` 型のマシンイプシロンDBL_EPSILON
: `double` 型のマシンイプシロンLDBL_EPSILON
: `long double` 型のマシンイプシロン
float.hの典型的な使い方
`
1. 数値の範囲チェック
浮動小数点数の範囲を超えないように制御する際に役立ちます。
2. 精度の確認
`FLT_DIG` などを利用して、許容される精度を考慮した演算を行うことができます。
3. 浮動小数点の誤差対策
`FLT_EPSILON` を用いて、小数点以下の誤差を考慮した比較を行います。
具体的な使用例
1. 数値の範囲チェック
#include <stdio.h>
#include <float.h>
int main() {
float x = 1.0e40;
if (x > FLT_MAX) {
printf("x は float の範囲を超えています。\n");
} else {
printf("x は float の範囲内です。\n");
}
return 0;
}
2. 浮動小数点の精度を確認
#include <stdio.h>
#include <float.h>
int main() {
printf("float の有効桁数: %d\n", FLT_DIG);
printf("double の有効桁数: %d\n", DBL_DIG);
printf("long double の有効桁数: %d\n", LDBL_DIG);
return 0;
}
3. マシンイプシロンを利用した比較
#include <stdio.h>
#include <float.h>
#include <math.h>
int main() {
double a = 1.0;
double b = 1.0 + DBL_EPSILON;
if (fabs(a - b) < DBL_EPSILON) {
printf("a と b はほぼ等しいと見なせます。\n");
} else {
printf("a と b は異なります。\n");
}
return 0;
}
まとめ
`