fmod, fmodf, fmodl  floatingpoint remainder function
Math library (libm
, lm
)
#include <math.h>
double fmod(double x, double y);
float fmodf(float x, float y);
long double fmodl(long double x, long double y);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
These functions compute the floatingpoint remainder of dividing
x
by y
. The return value is x
 n
*
y
, where n
is the quotient of x
/ y
,
rounded toward zero to an integer.
To obtain the modulus, more specifically, the Least Positive Residue, you will need to adjust the result from fmod like so:
z = fmod(x, y);
if (z < 0)
z += y;
An alternate way to express this is with fmod(fmod(x, y) + y, y), but the second fmod() usually costs way more than the one branch.
On success, these functions return the value x

n
*y
, for some integer n
, such that the
returned value has the same sign as x
and a magnitude less than
the magnitude of y
.
If x
or y
is a NaN, a NaN is returned.
If x
is an infinity, a domain error occurs, and a NaN is
returned.
If y
is zero, a domain error occurs, and a NaN is
returned.
If x
is +0 (0), and y
is not zero, +0 (0) is
returned.
The call fmod(372, 360)
returns 348.
The call fmod(372, 360)
returns 12.
The call fmod(372, 360)
also returns 12.
See math_error(7) for information on how to determine whether an error has occurred when calling these functions.
The following errors can occur:
x
is an infinityerrno
is set to EDOM (but see BUGS). An
invalid floatingpoint exception (FE_INVALID) is
raised.
y
is zeroerrno
is set to EDOM. An invalid
floatingpoint exception (FE_INVALID) is raised.
For an explanation of the terms used in this section, see attributes(7).
Interface  Attribute  Value 
Thread safety  MTSafe 
C11, POSIX.12008.
C99, POSIX.12001.
The variant returning double
also conforms to SVr4, 4.3BSD,
C89.
Before glibc 2.10, the glibc implementation did not set
errno
to EDOM when a domain error occurred for
an infinite x
.
remainder(3)