REMAINDER(3) BSD Programmer's Manual REMAINDER(3)

**remainder**, **remainderf**, **remquo**, **remquof** - remainder functions

libm

**#include <math.h>**
*double*
**remainder**(*double x*, *double y*);
*float*
**remainderf**(*float x*, *float y*);
*double*
**remquo**(*double x*, *double y*, *int *quo*);
*float*
**remquof**(*float x*, *float y*, *int *quo*);

Provided that *y* != 0 , the **remainder**() and **remainderf**() functions calcu-
late the floating-point remainder *r* of
*r* = *x - ny*,
where *n* is the integral value nearest to the exact value of *x / y*. If
*n - x / y* = 1/2 ,
the value *n* is chosen to be even. Consequently, the remainder is computed
exactly and *r* <= | *y* | / 2 .
Also the **remquo**() and **remquof**() functions calculate the remainder as
described above. But these additionally use *quo* to store a value whose
sign is the sign of *x / y* and whose magnitude is congruent modulo *2^k* to
the magnitude of the integral quotient of *x / y*, where *k* is an
implementation-defined integer greater than or equal to 3.
The rationale of the **remquo**() family of functions relates to situations
where only few bits of the quotient are required. The exact representa-
tion of the quotient may not be meaningful when *x* is large in magnitude
compared to *y*.

The functions return the remainder independent of the rounding mode. If *y*
is zero , *NaN* is returned and a domain error occurs. A domain error oc-
curs and a *NaN* is returned also when *x* is infinite but *y* is not a *NaN*. If
either *x* or *y* is *NaN*, a *NaN* is always returned.

div(3), fast_remainder32(3), fmod(3), math(3)

The described functions conform to ISO/IEC 9899:1999 ("ISO C99").
MirBSD #10-current September 18, 2011 1