### NAME

drem, dremf, dreml, remainder, remainderf, remainderl - floating-point remainder function

### SYNOPSIS

**#include <math.h>**

/* The C99 versions */
**double remainder(double ***x***, double ***y***);**
**float remainderf(float ***x***, float ***y***);**
**long double remainderl(long double ***x***, long double ***y***);**

/* Obsolete synonyms */
**double drem(double ***x***, double ***y***);**
**float dremf(float ***x***, float ***y***);**
**long double dreml(long double ***x***, long double ***y***);**

Link with *-lm*.

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

**remainder**(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE; or
*cc -std=c99* **remainderf**(), **remainderl**(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE; or
*cc -std=c99* **drem**(), **dremf**(), **dreml**(): _SVID_SOURCE || _BSD_SOURCE

### DESCRIPTION

The
**remainder**() function computes the remainder of dividing
*x* by
*y*. The return value is
*x*-*n***y*,
where
*n* is the value
*x / y*, rounded to the nearest integer.
If the absolute value of
*x*-*n***y*
is 0.5,
*n* is chosen to be even.

These functions are unaffected by the current rounding mode (see fenv(3)).

The
**drem**() function does precisely the same thing.

### RETURN VALUE

On success, these
functions return the floating-point remainder,
*x*-*n***y*.
If the return value is 0, it has the sign of
*x*.

If
*x* or
*y* is a NaN, a NaN is returned.

If
*x* is an infinity,
and
*y* is not a NaN,
a domain error occurs, and
a NaN is returned.

If
*y* is zero,
and
*x* is not a NaN,
a domain error occurs, and
a NaN is returned.

### ERRORS

See math_error(7) for information on how to determine whether an error has occurred when calling these functions.

The following errors can occur:

Domain error: x is an infinity and y is not a NaN
| |

An invalid floating-point exception
(FE_INVALID) is raised.
| |

These functions do not set
errno for this case.
| |

Domain error: y is zero
| |

errno is set to
EDOM. An invalid floating-point exception
(FE_INVALID) is raised.
| |

### CONFORMING TO

The functions
**remainder**(), **remainderf**(), and
**remainderl**() are specified in C99 and POSIX.1-2001.

The function
**drem**() is from 4.3BSD.
The
*float* and
*long double* variants
**dremf**() and
**dreml**() exist on some systems, such as Tru64 and glibc2.
Avoid the use of these functions in favor of
**remainder**() etc.

### BUGS

The call

remainder(nan(""), 0);

returns a NaN, as expected, but wrongly causes a domain error; it should yield a silent NaN.

### EXAMPLE

The call "remainder(29.0, 3.0)" returns -1.

### SEE ALSO

### COLOPHON

This page is part of release 3.23 of the Linux
*man-pages* project.
A description of the project,
and information about reporting bugs,
can be found at
http://www.kernel.org/doc/man-pages/.