函式
<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


另見