C++のisfinite()関数とは?構文・戻り値・実例付きでわかりやすく解説
本記事では、C++のisfinite()関数について、その動作の仕組み、構文、そして具体的な使用例を詳しく解説します。
isfinite()関数とは
isfinite()は、<cmath>ヘッダーファイルに含まれる組み込み関数です。この関数は、引数として渡された数値が「有限(finite)」であるかどうかを判定し、その結果を返します。
ここでいう有限数とは、無限大(∞)でもNaN(Not a Number:非数)でもない浮動小数点数のことを指します。つまり、通常の計算可能な数値であればtrueが返されます。
構文
isfinite()関数は、引数の型に応じて以下のようにオーバーロードされています。
bool isfinite(float n);
bool isfinite(double n);
bool isfinite(long double n);
この関数が受け取るパラメータは1つだけです。nは、有限かどうかを判定したい対象の値です。
戻り値
isfinite()関数はブール値(bool型)を返します。
- 数値が有限の場合:true(1)を返す
- 数値が有限でない場合(無限大やNaNなど):false(0)を返す
使用例1:除算結果の判定
#include <iostream>
#include <cmath>
using namespace std;
int main() {
float a = 10.0, b = 0.1, c = 0.0;
isfinite(a/b)?cout<<"\nThe result of a/b is finite":cout<<"\nThe result of a/b is not finite";
isfinite(a/c)?cout<<"\nThe result of a/c is finite":cout<<"\nThe result of a/c is not finite";
}
出力
上記のコードを実行すると、次のような出力が得られます。
The result of a/b is finite The result of a/c is not finite
解説: a/b(10.0 ÷ 0.1)は通常の有限な数値なのでtrueが返されます。一方、a/c(10.0 ÷ 0.0)はゼロ除算となり、結果が無限大(inf)になるためfalseが返されます。
使用例2:NaNの判定
#include <iostream>
#include <cmath>
using namespace std;
int main() {
float c = 0.0, d = -1.0;
// 数値が有限かどうかをチェック
isfinite(c)?cout<<"\nFinite number":cout<<"\nNot a finite number";
cout<<isfinite(sqrt(d)); // 結果は -NAN になる
}
出力
Finite number 0
解説: 変数c(0.0)は有限な数値なので「Finite number」と表示されました。一方、sqrt(d)は負の数(-1.0)の平方根を求めているため、結果はNaNになります。NaNは有限ではないため、isfinite()は0(false)を返します。
注意点
-1.0の平方根は数学的に定義されていないため、sqrt(-1.0)はNaNを返します。このように、isfinite()関数は無限大だけでなくNaNも検出できるため、数値計算のエラーチェックに非常に便利です。
-
C++のlog()関数とは?自然対数を求める方法をわかりやすく解説
C++の標準ライブラリには、数学的な計算を行うための便利な関数が多数用意されています。その中でもlog()関数は、数値の自然対数(ネイピア数 e を底とする対数)を求めるために使用される重要な関数です。log()関数の基本情報C/C++のライブラリ関数 double log(double x) は、引数 x の自然対数(底が e の対数)を返します。この関数を使用するには、ヘッダーファイル <cmath> をインクルードする必要があります。関数の宣言double log(double x)パラメータと戻り値パラメータ: x は浮動小数点型(double)の値です。自然対数を求めたい
-
C++のswap()関数とは?2つの変数の値を入れ替える方法をサンプルコード付きで解説
swap()関数とは C++のswap()関数は、2つの値を入れ替える(交換する)ための関数です。この関数を利用すれば、一時的な第三の変数を自分で用意することなく、2つの変数の値を簡単に入れ替えることができます。 swap()関数の構文 void swap(int variable_name1, int variable_name2); 変数に値を代入してswap()関数に渡した場合、関数内では値の入れ替えが行われますが、呼び出し元の実際の変数の値は変わりません。これは、引数が「値渡し」で渡されるためです。実際の変数の値を入れ替えたい場合は、後述する「参照渡し」を使用します。 例1:s