C++ 標準ライブラリの <cfloat> モジュール
<cfloat>は C++ 標準ライブラリのヘッダーファイルであり、浮動小数点数に関連するマクロと定数を定義します。これらのマクロと定数は、浮動小数点数の表現に関する精度や範囲などの情報を提供し、主に C 標準ライブラリの<float.h>ヘッダーファイルに由来します。
浮動小数点の基礎
C++ では、浮動小数点数は小数を表すために使用されるデータ型です。C++ には 2 つの基本的な浮動小数点型があります:
float:単精度浮動小数点数で、通常 4 バイトを占めます。double:倍精度浮動小数点数で、通常 8 バイトを占めます。
定義と構文
C++ では、次を使用してfloat 或 double浮動小数点変数を定義できます。例:
float f = 3.14f; // 使用 f 后缀表示浮点数字面量 double d = 2.718;
標準ライブラリでの浮動小数点操作
C++ 標準ライブラリには専用の「cfloat」モジュールはありませんが、<cmath>ヘッダーファイルには、浮動小数点演算のための多くの関数が用意されています。例:
sqrt:平方根を計算しますpow:べき乗を計算しますsin、cos、tan:三角関数を計算します
<cfloat>提供される定数
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. 最小の負の指数
FLT_MIN_EXP:float型の最小の負の指数。DBL_MIN_EXP:double型の最小の負の指数。LDBL_MIN_EXP:long double型の最小の負の指数。
4. 最大の正の指数
FLT_MAX_EXP:float型の最大の正の指数。DBL_MAX_EXP:double型の最大の正の指数。LDBL_MAX_EXP:long double型の最大の正の指数。
5. マシンイプシロン
FLT_EPSILON:float型のマシンイプシロン。1.0 と 1.0 より大きい最小の浮動小数点数を区別できる値を表します。DBL_EPSILON:double型のマシンイプシロン。LDBL_EPSILON:long double型のマシンイプシロン。
例
次の例は、C++ プログラムで<cfloat>提供される定数を使用する方法を示しています:
例
#include <iostream>
#include <cfloat>
int main() {
// float 型の範囲と精度を出力
std::cout << "float:\n";
std::cout << "Min: " << FLT_MIN << '\n';
std::cout << "Max: " << FLT_MAX << '\n';
std::cout << "Epsilon: " << FLT_EPSILON << '\n';
std::cout << "Digits: " << FLT_DIG << '\n';
// double 型の範囲と精度を出力
std::cout << "\ndouble:\n";
std::cout << "Min: " << DBL_MIN << '\n';
std::cout << "Max: " << DBL_MAX << '\n';
std::cout << "Epsilon: " << DBL_EPSILON << '\n';
std::cout << "Digits: " << DBL_DIG << '\n';
// long double 型の範囲と精度を出力
std::cout << "\nlong double:\n";
std::cout << "Min: " << LDBL_MIN << '\n';
std::cout << "Max: " << LDBL_MAX << '\n';
std::cout << "Epsilon: " << LDBL_EPSILON << '\n';
std::cout << "Digits: " << LDBL_DIG << '\n';
return 0;
}
#include <cfloat>
int main() {
// float 型の範囲と精度を出力
std::cout << "float:\n";
std::cout << "Min: " << FLT_MIN << '\n';
std::cout << "Max: " << FLT_MAX << '\n';
std::cout << "Epsilon: " << FLT_EPSILON << '\n';
std::cout << "Digits: " << FLT_DIG << '\n';
// double 型の範囲と精度を出力
std::cout << "\ndouble:\n";
std::cout << "Min: " << DBL_MIN << '\n';
std::cout << "Max: " << DBL_MAX << '\n';
std::cout << "Epsilon: " << DBL_EPSILON << '\n';
std::cout << "Digits: " << DBL_DIG << '\n';
// long double 型の範囲と精度を出力
std::cout << "\nlong double:\n";
std::cout << "Min: " << LDBL_MIN << '\n';
std::cout << "Max: " << LDBL_MAX << '\n';
std::cout << "Epsilon: " << LDBL_EPSILON << '\n';
std::cout << "Digits: " << LDBL_DIG << '\n';
return 0;
}
出力結果:
float: Min: 1.17549e-38 Max: 3.40282e+38 Epsilon: 1.19209e-07 Digits: 6 double: Min: 2.22507e-308 Max: 1.79769e+308 Epsilon: 2.22045e-16 Digits: 15 long double: Min: 2.22507e-308 Max: 1.79769e+308 Epsilon: 2.22045e-16 Digits: 15
以下は、<cmath>ヘッダーファイルの関数を使用して浮動小数点数を操作する簡単な例です:
例
#include <iostream>
#include <cmath> // 数学関数を含む
int main() {
double num = 9.0;
double root = sqrt(num); // 平方根を計算する
double power = pow(2.0, 3.0); // 2 の 3 乗を計算する
std::cout << "The square root of " << num << " is " << root << std::endl;
std::cout << "The power of 2 to the 3 is " << power << std::endl;
return 0;
}
#include <cmath> // 数学関数を含む
int main() {
double num = 9.0;
double root = sqrt(num); // 平方根を計算する
double power = pow(2.0, 3.0); // 2 の 3 乗を計算する
std::cout << "The square root of " << num << " is " << root << std::endl;
std::cout << "The power of 2 to the 3 is " << power << std::endl;
return 0;
}
出力結果:
The square root of 9 is 3 The power of 2 to the 3 is 8
注意事項
- 浮動小数点数の精度は有限であるため、浮動小数点演算を行う際に精度の問題が発生する可能性があります。
- 2 つの浮動小数点数が等しいかどうかを比較する場合、直接
==演算子を使用するのではなく、小さな誤差範囲を使用して判断する必要があります。
「cfloat」は C++ 標準ライブラリの一部ではありませんが、C++ は強力な浮動小数点サポートと関連する数学関数ライブラリを提供しています。<cmath>ヘッダーファイルを使用することで、さまざまな浮動小数点演算を簡単に行うことができます。この記事が、初心者が C++ の浮動小数点操作をよりよく理解するのに役立つことを願っています。