Difference between revisions of "cpp/numeric/math/isnan"
From cppreference.com
(link to c too) |
(detail, example) |
||
Line 3: | Line 3: | ||
{{dcl begin}} | {{dcl begin}} | ||
{{dcl header | cmath}} | {{dcl header | cmath}} | ||
− | {{dcl | since=c++11 | | + | {{dcl | since=c++11 | num=1 | |
bool isnan( float arg ); | bool isnan( float arg ); | ||
}} | }} | ||
− | {{dcl | since=c++11 | | + | {{dcl | since=c++11 | num=2 | |
bool isnan( double arg ); | bool isnan( double arg ); | ||
}} | }} | ||
− | {{dcl | since=c++11 | | + | {{dcl | since=c++11 | num=3 | |
bool isnan( long double arg ); | bool isnan( long double arg ); | ||
+ | }} | ||
+ | {{dcl | since=c++11 | num=4 | | ||
+ | bool isnan( Integral arg ); | ||
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | Determines if the given floating point number {{tt|arg}} is not-a-number ({{tt| | + | @1-3@ Determines if the given floating point number {{tt|arg}} is a not-a-number (NaN) value. |
+ | @4@ A set of overloads or a function template accepting the {{tt|from}} argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}). | ||
===Parameters=== | ===Parameters=== | ||
Line 23: | Line 27: | ||
===Return value=== | ===Return value=== | ||
− | {{c|true}} if {{tt|arg}} is | + | {{c|true}} if {{tt|arg}} is a NaN, {{c|false}} otherwise |
===Notes=== | ===Notes=== | ||
− | + | There are many different NaN values with different sign bits and payloads, see {{lc|std::nan}} and {{lc|std::numeric_limits::quiet_NaN}}. | |
+ | |||
+ | NaN values never compare equal to themselves or to other NaN values. Copying a NaN may change its bit pattern. | ||
+ | |||
+ | Another way to test if a floating-point value is NaN is to compare it with itself: {{c|bool is_nan(double x) { return x != x; }}} | ||
+ | |||
+ | ===Example=== | ||
+ | {{example | ||
+ | |code= | ||
+ | #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'; | ||
+ | } | ||
+ | |output= | ||
+ | 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 | ||
+ | }} | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
+ | {{dsc inc | cpp/numeric/math/dsc nan}} | ||
{{dsc inc | cpp/numeric/math/dsc fpclassify}} | {{dsc inc | cpp/numeric/math/dsc fpclassify}} | ||
{{dsc inc | cpp/numeric/math/dsc isfinite}} | {{dsc inc | cpp/numeric/math/dsc isfinite}} |
Revision as of 06:29, 10 October 2014
Defined in header <cmath>
|
||
bool isnan( float arg ); |
(1) | (since C++11) |
bool isnan( double arg ); |
(2) | (since C++11) |
bool isnan( long double arg ); |
(3) | (since C++11) |
bool isnan( Integral arg ); |
(4) | (since C++11) |
1-3) Determines if the given floating point number
arg
is a not-a-number (NaN) value.4) A set of overloads or a function template accepting the
from
argument of any integral type. Equivalent to (2) (the argument is cast to double). Contents |
Parameters
arg | - | floating point value |
Return value
true if arg
is a NaN, false otherwise
Notes
There are many different NaN values with different sign bits and payloads, see std::nan and std::numeric_limits::quiet_NaN.
NaN values never compare equal to themselves or to other NaN values. Copying a NaN may change its bit pattern.
Another way to test if a floating-point value is NaN is to compare it with itself: {{{1}}}}
Example
Run this code
#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'; }
Output:
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
See also
(C++11) |
categorizes the given floating-point value (function) |
(C++11) |
checks if the given number has finite value (function) |
(C++11) |
checks if the given number is infinite (function) |
(C++11) |
checks if the given number is normal (function) |
(C++11) |
checks if two floating-point values are unordered (function) |
C documentation for isnan
|