最近做Kalman滤波的时候不小心越界了,于是就出现了非数值。
标准提供了类似于isnan、isfinite、isinf、isnormal、fpclassify分别用于判断是非数(NaN)值、有限制、无穷值、正常数值等.
bool isnan( float arg ); (1) (C++11 起)
bool isnan( double arg ); (2) (C++11 起)
bool isnan( long double arg ); (3) (C++11 起)
bool isnan( IntegralType arg ); (4) (C++11 起)
1-3) 确定给定的浮点数 arg 是否为非数( NaN )值。
4) 接受任何整数类型 arg 参数的重载集或函数模板。等价于 (2) (将参数转型为 double )。
#include <iostream> #include <cmath> #include <cfloat> int main() { std::cout << std::boolalpha << "isnan(NaN) = " << std::isnan(NAN) << '\n' << "isnan(Inf) = " << std::isnan(INFINITY) << '\n' << "isnan(0.0) = " << std::isnan(0.0) << '\n' << "isnan(DBL_MIN/2.0) = " << std::isnan(DBL_MIN/2.0) << '\n' << "isnan(0.0 / 0.0) = " << std::isnan(0.0/0.0) << '\n' << "isnan(Inf - Inf) = " << std::isnan(INFINITY - INFINITY) << '\n'; } 输出: isnan(NaN) = true isnan(Inf) = false isnan(0.0) = false isnan(DBL_MIN/2.0) = false isnan(0.0 / 0.0) = true isnan(Inf - Inf) = true
参考 https://zh.cppreference.com/w/cpp/numeric/math/isnan