.\" Copyright 2002 Walter Harms (walter.harms@informatik.uni-oldenburg.de)
.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
.\"     <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
.\" Distributed under GPL
.\" %%%LICENSE_END
.\"
.\" Based on glibc infopages
.\"
.TH NEXTAFTER 3 2021-03-22 "GNU" "Linux Programmer's Manual"
.SH NAME
nextafter, nextafterf, nextafterl, nexttoward, nexttowardf, nexttowardl \-
floating-point number manipulation
.SH SYNOPSIS
.nf
.B #include <math.h>
.PP
.BI "double nextafter(double " x ", double " y );
.BI "float nextafterf(float " x ", float " y );
.BI "long double nextafterl(long double " x ", long double " y );
.PP
.BI "double nexttoward(double " x ", long double " y );
.BI "float nexttowardf(float " x ", long double " y );
.BI "long double nexttowardl(long double " x ", long double " y );
.fi
.PP
Link with \fI\-lm\fP.
.PP
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.PP
.BR nextafter ():
.nf
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
        || _XOPEN_SOURCE >= 500
.\"    || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.fi
.PP
.BR nextafterf (),
.BR nextafterl ():
.nf
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.fi
.PP
.BR nexttoward (),
.BR nexttowardf (),
.BR nexttowardl ():
.nf
    _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE
        || _POSIX_C_SOURCE >= 200112L
.fi
.SH DESCRIPTION
The
.BR nextafter (),
.BR nextafterf (),
and
.BR nextafterl ()
functions return the next representable floating-point value following
.I x
in the direction of
.IR y .
If
.I y
is less than
.IR x ,
these functions will return the largest representable number less than
.IR x .
.PP
If
.I x
equals
.IR y ,
the functions return
.IR y .
.PP
The
.BR nexttoward (),
.BR nexttowardf (),
and
.BR nexttowardl ()
functions do the same as the corresponding
.BR nextafter ()
functions, except that they have a
.I "long double"
second argument.
.SH RETURN VALUE
On success,
these functions return the next representable floating-point value after
.I x
in the direction of
.IR y .
.PP
If
.I x
equals
.IR y ,
then
.I y
(cast to the same type as
.IR x )
is returned.
.PP
If
.I x
or
.I y
is a NaN,
a NaN is returned.
.PP
If
.I x
is finite,
.\" e.g., DBL_MAX
and the result would overflow,
a range error occurs,
and the functions return
.BR HUGE_VAL ,
.BR HUGE_VALF ,
or
.BR HUGE_VALL ,
respectively, with the correct mathematical sign.
.PP
If
.I x
is not equal to
.IR y ,
and the correct function result would be subnormal, zero, or underflow,
a range error occurs,
and either the correct value (if it can be represented),
or 0.0, is returned.
.SH ERRORS
See
.BR math_error (7)
for information on how to determine whether an error has occurred
when calling these functions.
.PP
The following errors can occur:
.TP
Range error: result overflow
.\" e.g., nextafter(DBL_MAX, HUGE_VAL);
.I errno
is set to
.BR ERANGE .
An overflow floating-point exception
.RB ( FE_OVERFLOW )
is raised.
.TP
Range error: result is subnormal or underflows
.\" e.g., nextafter(DBL_MIN, 0.0);
.I errno
is set to
.BR ERANGE .
An underflow floating-point exception
.RB ( FE_UNDERFLOW )
is raised.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR nextafter (),
.BR nextafterf (),
.BR nextafterl (),
.BR nexttoward (),
.BR nexttowardf (),
.BR nexttowardl ()
T}	Thread safety	MT-Safe
.TE
.hy
.ad
.sp 1
.SH CONFORMING TO
C99, POSIX.1-2001, POSIX.1-2008.
This function is defined in IEC 559 (and the appendix with
recommended functions in IEEE 754/IEEE 854).
.SH BUGS
In glibc version 2.5 and earlier, these functions do not raise an underflow
floating-point
.RB ( FE_UNDERFLOW )
exception when an underflow occurs.
.PP
Before glibc version 2.23
.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6799
these functions did not set
.IR errno .
.SH SEE ALSO
.BR nearbyint (3)
