# fmod

## NAME



           fmod, fmodf, fmodl - floating-point remainder function
    


## LIBRARY



           Math library (_libm_ , _-lm_)
    


## SYNOPSIS



           **#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)):
    
           **fmodf**(), **fmodl**():
               _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
                   || /* Since glibc 2.19: */ _DEFAULT_SOURCE
                   || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
    


## DESCRIPTION



           These functions compute the floating-point 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 += fabs(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.
    


## RETURN VALUE



           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.
    


## 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
                  _errno_ is set to **EDOM**(but see BUGS).  An invalid floating-
                  point exception (**FE_INVALID**) is raised.
    
           Domain error: _y_ is zero
                  _errno_ is set to **EDOM**.  An invalid floating-point exception
                  (**FE_INVALID**) is raised.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **fmod**(), **fmodf**(), **fmodl**()             │ Thread safety │ MT-Safe │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## STANDARDS



           C11, POSIX.1-2008.
    


## BUGS



           Before glibc 2.10, the glibc implementation did not set _errno_ to
           **EDOM** when a domain error occurred for an infinite _x_.
    


## EXAMPLES



           The call _fmod(372, 360)_ returns 12.
    
           The call _fmod(-372, 360)_ returns -12.
    
           The call _fmod(-372, -360)_ also returns -12.
    


* * *