]> git.ipfire.org Git - thirdparty/man-pages.git/blobdiff - man3/remainder.3
rename.2: SEE ALSO: add rename(1)
[thirdparty/man-pages.git] / man3 / remainder.3
index 85ea6ea4603ae99fd96265514e16bc6a36644688..59b2038e81674133cab676505afb05901f607011 100644 (file)
@@ -1,5 +1,8 @@
 .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
+.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
+.\"     <mtk.manpages@gmail.com>
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
@@ -19,6 +22,7 @@
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
 .\"
 .\" References consulted:
 .\"     Linux libc source code
 .\"    (walter.harms@informatik.uni-oldenburg.de)
 .\" Modified 2003-11-18, 2004-10-05 aeb
 .\"
-.TH REMAINDER 3  2007-07-26 "" "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 (),
+.BR remainder ():
+.RS 4
+_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 ():
-_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _ISOC99_SOURCE; or
-.I cc\ -std=c99
+.RS 4
+_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 ():
-_SVID_SOURCE || _BSD_SOURCE
+.RS 4
+/* 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 .
 The return value is
-.IR x " \- " n " * " y ,
+\fIx\fP\-\fIn\fP*\fIy\fP,
 where
 .I n
 is the value
-.IR x " / " y ,
+.IR "x\ /\ y" ,
 rounded to the nearest integer.
-If this quotient is 1/2 (mod 1), it is rounded to the nearest even number
-(independent of the current rounding mode).
-If the return value is 0, it has the sign of
-.IR x .
-.LP
+If the absolute value of
+\fIx\fP\-\fIn\fP*\fIy\fP
+is 0.5,
+.I n
+is chosen to be even.
+.PP
+These functions are unaffected by the current rounding mode (see
+.BR fenv (3)).
+.PP
 The
 .BR drem ()
 function does precisely the same thing.
-.SH "RETURN VALUE"
-The
-.BR remainder ()
-function returns the remainder, unless
+.SH RETURN VALUE
+On success, these
+functions return the floating-point remainder,
+\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 zero, when the function fails and
-.I errno
-is set.
+is a NaN, a NaN is returned.
+.PP
+If
+.I x
+is an infinity,
+and
+.I y
+is not a NaN,
+a domain error occurs, and
+a NaN is returned.
+.PP
+If
+.I y
+is zero,
+.\" FIXME . Instead, glibc gives a domain error even if x is a NaN
+and
+.I x
+is not a NaN,
+.\" Interestingly, remquo(3) does not have the same problem.
+a domain error occurs, and
+a NaN 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
-.B EDOM
-The denominator
-.I y
-is zero.
-.SH "CONFORMING TO"
-IEC 60559.
+Domain error: \fIx\fP is an infinity and \fIy\fP is not a NaN
+.I errno
+is set to
+.BR EDOM
+(but see BUGS).
+An invalid floating-point exception
+.RB ( FE_INVALID )
+is raised.
+.IP
+These functions do not set
+.IR errno
+for this case.
+.TP
+Domain error: \fIy\fP is zero\" [XXX see bug above] and \fIx\fP is not a NaN
+.I errno
+is set to
+.BR EDOM .
+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 remainder (),
 .BR remainderf (),
 and
 .BR remainderl ()
-are from C99.
+are specified in C99, POSIX.1-2001, and POSIX.1-2008.
+.PP
 The function
 .BR drem ()
 is from 4.3BSD.
@@ -124,8 +211,32 @@ variants
 and
 .BR dreml ()
 exist on some systems, such as Tru64 and glibc2.
+Avoid the use of these functions in favor of
+.BR remainder ()
+etc.
+.SH BUGS
+Before glibc 2.15,
+.\" http://sources.redhat.com/bugzilla/show_bug.cgi?id=6779
+the call
+.PP
+    remainder(nan(""), 0);
+.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"
+.SH SEE ALSO
+.BR div (3),
 .BR fmod (3),
 .BR remquo (3)