-
NaN値のチェック:
#include <cmath> #include <iostream> bool isNan(double value) { return std::isnan(value); } int main() { double result = 0.0 / 0.0; if (isNan(result)) { std::cout << "Result is NaN." << std::endl; } else { std::cout << "Result is not NaN." << std::endl; } return 0; }
-
NaN値の比較:
#include <cmath> #include <iostream> bool isEqualNaN(double value1, double value2) { return std::isnan(value1) && std::isnan(value2); } int main() { double a = 0.0 / 0.0; double b = sqrt(-1.0); if (isEqualNaN(a, b)) { std::cout << "a and b are both NaN." << std::endl; } else { std::cout << "a and b are not both NaN." << std::endl; } return 0; }
-
NaN値の代替値の設定:
#include <cmath> #include <iostream> #include <limits> double replaceNaN(double value, double replacement) { if (std::isnan(value)) { return replacement; } return value; } int main() { double result = 0.0 / 0.0; double defaultValue = 10.0; double newValue = replaceNaN(result, defaultValue); std::cout << "New value: " << newValue << std::endl; return 0; }
-
NaN値のエラーハンドリング:
#include <cmath> #include <iostream> #include <cerrno> #include <cfenv> double calculateSqrt(double value) { std::feclearexcept(FE_ALL_EXCEPT); double result = std::sqrt(value); if (std::fetestexcept(FE_INVALID)) { std::cerr << "Invalid input: square root of a negative value." << std::endl; } return result; } int main() { double negativeValue = -1.0; double sqrtValue = calculateSqrt(negativeValue); return 0; }
これらのコード例は、C++でNaN値を処理する方法と、関連するエラーを分析する方法を示しています。適切な方法を選択し、NaN値に対する適切な処理を行うことが重要です。また、エラーハンドリングを適切に行うことで、プログラムの安定性と信頼性を向上させることができます。