C++のisunordered()関数とは?構文・戻り値・使い方を徹底解説
本記事では、C++のisunordered()関数について、その構文、動作の仕組み、そして戻り値の詳細をわかりやすく解説します。
isunordered()関数は、C++の標準ヘッダーファイル「<cmath>」で定義されている組み込み関数です。この関数は、2つの浮動小数点数を比較し、どちらか一方、あるいは両方がNaN(Not a Number)であるかどうかを判定します。NaNが含まれている場合は1(true)を返し、どちらも有効な数値であれば0(false)を返します。
構文
bool isunordered(float n1, float n2);
または
bool isunordered(double n1, double n2);
または
bool isunordered(long double n1, long double n2);
この関数は、比較対象となる2つの浮動小数点型の変数を引数として受け取り、そのうちのいずれかがNaNであるかどうかをチェックします。
戻り値
この関数はブール値を返します。具体的には、条件を満たす場合(NaNが含まれる場合)は1(true)、満たさない場合は0(false)となります。
使用例1:sqrt()の結果と0を比較する場合
#include <iostream>
#include <cmath>
using namespace std;
int main() {
float a = -1.0;
float c = sqrt(-1.0);
cout << c;
// cの結果を出力
cout << "\n" << isunordered(c, 0.0); // どちらかがNaNかどうかをチェック
}出力
上記のコードを実行すると、以下の出力が生成されます。
-nan 1
負の数に対してsqrt()を実行すると結果はNaNになるため、isunordered()は1(true)を返しています。
使用例2:通常の数値同士を比較する場合
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << isunordered(0.0, -1.0);
}出力
上記のコードを実行すると、以下の出力が生成されます。
0
この例では、0.0と-1.0はどちらも有効な数値でありNaNではないため、isunordered()は0(false)を返します。
まとめ
isunordered()関数は、浮動小数点演算においてNaNの検出が必要な場面で非常に便利な関数です。特に、数学的な計算結果が不定になった場合のエラーチェックや、例外処理の前段階での値の妥当性確認などに活用できます。IEEE 754規格に基づく浮動小数点演算では、NaNとの比較演算は常にfalseを返すため、通常の比較演算子ではNaNを検出できません。そのため、NaNの存在を確実に判定したい場合は、このisunordered()関数を使用することが推奨されます。
-
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