.\" (walter.harms@informatik.uni-oldenburg.de)
.\" Modified 2003-11-18, 2004-10-05 aeb
.\"
-.TH REMAINDER 3 2010-09-20 "" "Linux Programmer's Manual"
+.TH REMAINDER 3 2017-09-15 "" "Linux Programmer's Manual"
.SH NAME
drem, dremf, dreml, remainder, remainderf, remainderl \- \
floating-point remainder function
.SH SYNOPSIS
.nf
.B #include <math.h>
-.sp
+.PP
/* The C99 versions */
.BI "double remainder(double " x ", double " y );
.BI "float remainderf(float " x ", float " y );
.BI "long double remainderl(long double " x ", long double " y );
-.sp
+.PP
/* Obsolete synonyms */
.BI "double drem(double " x ", double " y );
.BI "float dremf(float " x ", float " y );
.BI "long double dreml(long double " x ", long double " y );
-.sp
+.PP
.fi
Link with \fI\-lm\fP.
-.sp
+.PP
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
-.sp
+.PP
.ad l
.BR remainder ():
.RS 4
-_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 ||
-_XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED ||
-_ISOC99_SOURCE ||
-_POSIX_C_SOURCE\ >=\ 200112L;
-.br
-or
-.I cc\ -std=c99
+_ISOC99_SOURCE || _POSIX_C_SOURCE\ >=\ 200112L
+ || _XOPEN_SOURCE\ >=\ 500
+.\" || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
+ || /* Since glibc 2.19: */ _DEFAULT_SOURCE
+ || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.RE
.br
.BR remainderf (),
.BR remainderl ():
.RS 4
-_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE ||
-_POSIX_C_SOURCE\ >=\ 200112L;
-.br
-or
-.I cc\ -std=c99
+_ISOC99_SOURCE || _POSIX_C_SOURCE\ >=\ 200112L
+ || /* Since glibc 2.19: */ _DEFAULT_SOURCE
+ || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.RE
.br
.BR drem (),
.BR dremf (),
.BR dreml ():
.RS 4
-_SVID_SOURCE || _BSD_SOURCE
+/* Since glibc 2.19: */ _DEFAULT_SOURCE
+ || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.RE
.ad b
.SH DESCRIPTION
-The
-.BR remainder ()
-function computes the remainder of dividing
+These
+functions compute the remainder of dividing
.I x
by
.IR y .
is 0.5,
.I n
is chosen to be even.
-
+.PP
These functions are unaffected by the current rounding mode (see
.BR fenv (3)).
-.LP
+.PP
The
.BR drem ()
function does precisely the same thing.
\fIx\fP\-\fIn\fP*\fIy\fP.
If the return value is 0, it has the sign of
.IR x .
-
+.PP
If
.I x
or
.I y
is a NaN, a NaN is returned.
-
+.PP
If
.I x
is an infinity,
is not a NaN,
a domain error occurs, and
a NaN is returned.
-
+.PP
If
.I y
is zero,
The following errors can occur:
.TP
Domain error: \fIx\fP is an infinity and \fIy\fP is not a NaN
-.\" .I errno
-.\" is set to
-.\" .BR EDOM .
+.I errno
+is set to
+.BR EDOM
+(but see BUGS).
An invalid floating-point exception
.RB ( FE_INVALID )
is raised.
These functions do not set
.IR errno
for this case.
-.\" FIXME . Is it intentional that these functions do not set errno?
-.\" They do set errno for the y == 0 case, below.
-.\" Bug raised: http://sources.redhat.com/bugzilla/show_bug.cgi?id=6783
.TP
Domain error: \fIy\fP is zero\" [XXX see bug above] and \fIx\fP is not a NaN
.I errno
An invalid floating-point exception
.RB ( FE_INVALID )
is raised.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbw26 lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR drem (),
+.BR dremf (),
+.BR dreml (),
+.br
+.BR remainder (),
+.BR remainderf (),
+.br
+.BR remainderl ()
+T} Thread safety MT-Safe
+.TE
.SH CONFORMING TO
.\" IEC 60559.
The functions
.BR remainderf (),
and
.BR remainderl ()
-are specified in C99 and POSIX.1-2001.
-
+are specified in C99, POSIX.1-2001, and POSIX.1-2008.
+.PP
The function
.BR drem ()
is from 4.3BSD.
.BR remainder ()
etc.
.SH BUGS
-The call
-
+Before glibc 2.15,
+.\" http://sources.redhat.com/bugzilla/show_bug.cgi?id=6779
+the call
+.PP
remainder(nan(""), 0);
-
-returns a NaN, as expected, but wrongly causes a domain error;
-it should yield a silent NaN.
-.\" FIXME . this bug occurs as at glibc 2.8.
-.\" Bug raised: http://sources.redhat.com/bugzilla/show_bug.cgi?id=6779
+.PP
+returned a NaN, as expected, but wrongly caused a domain error.
+Since glibc 2.15, a silent NaN (i.e., no domain error) is returned.
+.PP
+Before glibc 2.15,
+.\" http://sources.redhat.com/bugzilla/show_bug.cgi?id=6783
+.I errno
+was not set to
+.BR EDOM
+for the domain error that occurs when
+.I x
+is an infinity and
+.I y
+is not a NaN.
.SH EXAMPLE
The call "remainder(29.0, 3.0)" returns \-1.
.SH SEE ALSO