NAN(3) | Library Functions Manual | NAN(3)

# NAME

`nan`, `nanf`, `nanl` — quiet NaNs

# SYNOPSIS

Math Library (libm, -lm)
`#include <math.h>`

double
`nan`(const char *s);

float
`nanf`(const char *s);

long double
`nanl`(const char *s);

# DESCRIPTION

The `NAN` macro expands to a quiet NaN (Not A Number). Similarly both the `nan`(), `nanf`() and `nanl`() functions generate a quiet NaN value without raising an invalid exception. The argument s should point to either an empty string or a hexadecimal representation of a non-negative integer (e.g. 0x1234). In the latter case, the integer is encoded in some free bits in the representation of the NaN, which sometimes stores machine-specific information about why a particular NaN was generated. There are 22 such bits available for float variables, 51 bits for double variables, and at least 51 bits for a long double. If s is improperly formatted or represents an integer that is too large, then the particular encoding of the quiet NaN that is returned is indeterminate.

# COMPATIBILITY

Calling these functions with a non-empty string isn't portable. Another operating system may translate the string into a different NaN encoding, and furthermore, the meaning of a given NaN encoding varies across machine architectures. If you understood the innards of a particular platform well enough to know what string to use, then you would have no need for these functions anyway, so don't use them. Use the `NAN` macro instead.

# SEE ALSO

isnan(3), strtod(3)

# STANDARDS

The `nan`(), `nanf`() and `nanl`() functions and the `NAN` macro conform to ISO/IEC 9899:1999 (“ISO C99”).

June 7, 2025 | Debian