函数
<cmath> <ctgmath>

fmod

double fmod (double numer, double denom);
     double fmod  (double numer     , double denom);      float fmodf (float numer      , float denom);long double fmodl (long double numer, long double denom);
     double fmod (double numer     , double denom);      float fmod (float numer      , float denom);long double fmod (long double numer, long double denom);
     double fmod (double numer     , double denom);      float fmod (float numer      , float denom);long double fmod (long double numer, long double denom);     double fmod (Type1 numer      , Type2 denom);       // additional overloads
计算除法的余数
返回 numer/denom 的浮点余数(向零舍入)

fmod = numer - tquot * denom

其中 tquot 是由 numer/denom 计算出的截断(即向零舍入)结果。

一个类似的函数 remainder 返回相同结果,但其商是四舍五入到最接近的整数(而不是截断)。

头文件 <tgmath.h> 提供了此函数的类型通用宏版本。
在此头文件中(<cmath>)为其他 算术类型 的组合(Type1Type2)提供了额外的重载:这些重载在计算前有效地将参数转换为 double,除非至少有一个参数的类型是 long double(在这种情况下,两个参数都会被转换为 long double)。

参数

numer
被除数的分子值。
denom
除数的除数值。

返回值

参数相除的余数。
如果 denom 为零,函数可能会返回零或引发一个域错误(取决于库的实现)。

如果发生定义域错误,全局变量 errno 会被设置为 EDOM
如果发生定义域错误
- 并且 math_errhandling 设置了 MATH_ERRNO:全局变量 errno 会被设置为 EDOM
- 并且 math_errhandling 设置了 MATH_ERREXCEPT:将引发 FE_INVALID

示例

1
2
3
4
5
6
7
8
9
10
/* fmod example */
#include <stdio.h>      /* printf */
#include <math.h>       /* fmod */

int main ()
{
  printf ( "fmod of 5.3 / 2 is %f\n", fmod (5.3,2) );
  printf ( "fmod of 18.5 / 4.2 is %f\n", fmod (18.5,4.2) );
  return 0;
}

输出

fmod of 5.3 / 2 is 1.300000
fmod of 18.5 / 4.2 is 1.700000


另见