函数
<cmath> <ctgmath>

remainder

     double remainder  (double numer     , double denom);      float remainderf (float numer      , float denom);long double remainderl (long double numer, long double denom);
     double remainder (double numer     , double denom);      float remainder (float numer      , float denom);long double remainder (long double numer, long double denom);     double remainder (Type1 numer      , Type2 denom);       // additional overloads
计算余数 (IEC 60559)
返回 numer/denom 的浮点余数(四舍五入到最近的值)。

remainder = numer - rquot * denom

其中 rquotnumer/denom 的结果,向最近的整数值舍入(中间情况则向偶数舍入)。

一个类似的函数 fmod 返回相同的结果,但其商是截断的(向零舍入)。
函数 remquo 的行为与此函数相同,但它还额外提供了对所使用的中间商值的访问。

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

参数

numer
商的分子值。
denom
商的分母值。

返回值

参数相除的余数。
如果余数为零,其符号应与 numer 的符号相同。
如果 denom 为零,该函数可能返回零或导致一个定义域错误(取决于库的实现)。

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

示例

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

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

输出

remainder of 5.3 / 2 is -0.700000
remainder of 18.5 / 4.2 is 1.700000


另见