summaryrefslogtreecommitdiffstats
path: root/man3/remainder.3
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--man3/remainder.3235
1 files changed, 235 insertions, 0 deletions
diff --git a/man3/remainder.3 b/man3/remainder.3
new file mode 100644
index 0000000..df97879
--- /dev/null
+++ b/man3/remainder.3
@@ -0,0 +1,235 @@
+'\" t
+.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
+.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
+.\" <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.\" References consulted:
+.\" Linux libc source code
+.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
+.\" 386BSD man pages
+.\"
+.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
+.\" Modified 2002-08-10 Walter Harms
+.\" (walter.harms@informatik.uni-oldenburg.de)
+.\" Modified 2003-11-18, 2004-10-05 aeb
+.\"
+.TH remainder 3 2023-07-20 "Linux man-pages 6.05.01"
+.SH NAME
+drem, dremf, dreml, remainder, remainderf, remainderl \- \
+floating-point remainder function
+.SH LIBRARY
+Math library
+.RI ( libm ", " \-lm )
+.SH SYNOPSIS
+.nf
+.B #include <math.h>
+.PP
+.BI "double remainder(double " x ", double " y );
+.BI "float remainderf(float " x ", float " y );
+.BI "long double remainderl(long double " x ", long double " y );
+.PP
+/* Obsolete synonyms */
+.BI "[[deprecated]] double drem(double " x ", double " y );
+.BI "[[deprecated]] float dremf(float " x ", float " y );
+.BI "[[deprecated]] long double dreml(long double " x ", long double " y );
+.fi
+.PP
+.RS -4
+Feature Test Macro Requirements for glibc (see
+.BR feature_test_macros (7)):
+.RE
+.PP
+.BR remainder ():
+.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 remainderf (),
+.BR remainderl ():
+.nf
+ _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
+ || /* Since glibc 2.19: */ _DEFAULT_SOURCE
+ || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
+.fi
+.PP
+.BR drem (),
+.BR dremf (),
+.BR dreml ():
+.nf
+ /* Since glibc 2.19: */ _DEFAULT_SOURCE
+ || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
+.fi
+.SH DESCRIPTION
+These
+functions compute the remainder of dividing
+.I x
+by
+.IR y .
+The return value is
+\fIx\fP\-\fIn\fP*\fIy\fP,
+where
+.I n
+is the value
+.IR "x\ /\ y" ,
+rounded to the nearest integer.
+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
+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 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
+Domain error: \fIx\fP is an infinity and \fIy\fP is not a NaN
+.I errno
+is set to
+.B EDOM
+(but see BUGS).
+An invalid floating-point exception
+.RB ( FE_INVALID )
+is raised.
+.IP
+These functions do not set
+.I 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;
+lbx lb lb
+l l l.
+Interface Attribute Value
+T{
+.na
+.nh
+.BR drem (),
+.BR dremf (),
+.BR dreml (),
+.BR remainder (),
+.BR remainderf (),
+.BR remainderl ()
+T} Thread safety MT-Safe
+.TE
+.sp 1
+.SH STANDARDS
+.\" IEC 60559.
+.TP
+.BR remainder ()
+.TQ
+.BR remainderf ()
+.TQ
+.BR remainderl ()
+C11, POSIX.1-2008.
+.TP
+.BR drem ()
+.TQ
+.BR dremf ()
+.TQ
+.BR dreml ()
+None.
+.SH HISTORY
+.\" IEC 60559.
+.TP
+.BR remainder ()
+.TQ
+.BR remainderf ()
+.TQ
+.BR remainderl ()
+C99, POSIX.1-2001.
+.TP
+.BR drem ()
+4.3BSD.
+.TP
+.BR dremf ()
+.TQ
+.BR dreml ()
+Tru64, glibc2.
+.SH BUGS
+Before glibc 2.15,
+.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6779
+the call
+.PP
+.in +4n
+.EX
+remainder(nan(""), 0);
+.EE
+.in
+.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,
+.\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=6783
+.I errno
+was not set to
+.B EDOM
+for the domain error that occurs when
+.I x
+is an infinity and
+.I y
+is not a NaN.
+.SH EXAMPLES
+The call "remainder(29.0, 3.0)" returns \-1.
+.SH SEE ALSO
+.BR div (3),
+.BR fmod (3),
+.BR remquo (3)