# isnan, _isnan, _isnanf

Tests if a floating-point value is not a number (NAN).

## Syntax

```
int isnan(
/* floating-point */ x
); /* C-only macro */
int _isnan(
double x
);
int _isnanf(
float x
); /* x64 only */
template <class T>
bool isnan(
T x
) throw(); /* C++ only */
```

### Parameters

*x*

The floating-point value to test.

## Return Value

In C, the **isnan** macro and the **_isnan** and **_isnanf** functions return a non-zero value if the argument *x* is a NAN; otherwise they return 0.

In C++, the **isnan** template function returns **true** if the argument *x* is a NaN; otherwise it returns **false**.

## Remarks

Because a NaN value does not compare as equal to any other NaN value, you must use one of these functions or macros to detect one. A NaN is generated when the result of a floating-point operation can't be represented in IEEE-754 floating-point format for the specified type. For information about how a NaN is represented for output, see printf.

When compiled as C++, the **isnan** macro is not defined, and an **isnan** template function is defined instead. It behaves the same way as the macro, but returns a value of type **bool** instead of an integer.

The **_isnan** and **_isnanf** functions are Microsoft-specific. The **_isnanf** function is only available when compiled for x64.

## Requirements

Routine | Required header (C) | Required header (C++) |
---|---|---|

isnan, _isnanf |
<math.h> | <math.h> or <cmath> |

_isnan |
<float.h> | <float.h> or <cfloat> |

For more compatibility information, see Compatibility.

## See also

Floating-Point Support

fpclassify

_fpclass, _fpclassf

isfinite, _finite, _finitef

isinf

isnormal

## Feedback

Loading feedback...