DESCRIPTION

[CX] The functionality described on this reference page is aligned with the ISO C standard. Any conflict between the
requirements described here and the ISO C standard is unintentional. This volume of IEEE Std 1003.1-2001 defers to
the ISO C standard.

The nextafter(), nextafterf(), and nextafterl() functions shall compute the next representable
floating-point value following x in the direction of y. Thus, if y is less than x, nextafter()
shall return the largest representable floating-point number less than x. The nextafter(), nextafterf(), and
nextafterl() functions shall return y if x equals y.

The nexttoward(), nexttowardf(), and nexttowardl() functions shall be equivalent to the corresponding
nextafter() functions, except that the second parameter shall have type long double and the functions shall return
y converted to the type of the function if x equals y.

An application wishing to check for error situations should set errno to zero and call
feclearexcept(FE_ALL_EXCEPT) before calling these functions. On return, if errno is non-zero or
fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW) is non-zero, an error has occurred.

RETURN VALUE

Upon successful completion, these functions shall return the next representable floating-point value following x in the
direction of y.

If x== y, y (of the type x) shall be returned.

If x is finite and the correct function value would overflow, a range error shall occur and ±HUGE_VAL,
±HUGE_VALF, and ±HUGE_VALL (with the same sign as x) shall be returned as appropriate for the return type of
the function.

If x!= y and the correct function value is subnormal, zero, or underflows, a range error shall occur, and either
the correct function value (if representable) or 0.0 shall be returned.

ERRORS

These functions shall fail if:

Range Error

The correct value overflows.

If the integer expression (math_errhandling & MATH_ERRNO) is non-zero, then errno shall be set to [ERANGE]. If the
integer expression (math_errhandling & MATH_ERREXCEPT) is non-zero, then the overflow floating-point exception shall be
raised.

If the integer expression (math_errhandling & MATH_ERRNO) is non-zero, then errno shall be set to [ERANGE]. If the
integer expression (math_errhandling & MATH_ERREXCEPT) is non-zero, then the underflow floating-point exception shall be
raised.

The following sections are informative.

EXAMPLES

None.

APPLICATION USAGE

On error, the expressions (math_errhandling & MATH_ERRNO) and (math_errhandling & MATH_ERREXCEPT) are independent of
each other, but at least one of them must be non-zero.