頭文件:#include <math.h>
fmod() 用來對浮點數進行取模(求余),其原型為:
double fmod (double x);
設返回值為 ret,那么 x = n * y + ret,其中 n 是整數,ret 和 x 有相同的符號,而且 ret 的絕對值小於 y 的絕對值。如果 x = 0,那么 ret = NaN。
fmod 函數計算 x 除以 y 的 f 浮點余數,這樣 x = i*y + f,其中 i 是整數,f 和 x 有相同的符號,而且 f 的絕對值小於 y 的絕對值。
fmod()與求模運算符%的對比
1) % 運算符
% 只用於整型的計算,后一個數不能是0,參與運算的數據可正可負。
對於x%y ,計算之后結果的正負與 x 的符號相同,如果前者是較小的數,后者是較大的數,那么,結果直接為較小的數。例如:
10%3=1
3%10=3
10%-3=1
-3%10=-3
-10%-3=-1
-3%-10=-3
3%13=3
0%3=0
0%-3=0
3%0 (×)Error!
-3%0 (×)Error!
10.0%3.0 (×)Error! // 浮點型不能進行模運算
2) fmod()函數
fmod()函數可以對浮點型數據進行取模運算,后一個數可為0,這時函數返回NaN。
計算后結果的符號與前者(x)相同,如果前者是較小的數,后者是較大的數,那么結果直接為較小的數。
舉例如下:
- float x=10.0;
- float y=-3.0;
- float z=3.0;
- result=fmod(x,z);
- printf("10.0%%3.0= %f/n",result); //1.0
- result=fmod(z,x);
- printf("3.0%%10.0= %f/n",result); //3.0
- result=fmod(x,y);
- printf("10.0%%-3.0= %f/n",result); //1.0
- result=fmod(y,x);
- printf("-3.0%%10.0= %f/n",result); //-3.0
- result=fmod(0,z);
- printf("0.0%%3.0= %f/n",result); //0.0
- result=fmod(0,y);
- printf("0.0%%-3.0= %f/n",result); //0.0
- result=fmod(3,13);
- printf("3%%-13= %f/n",result); //3
- result=fmod(10.1,3.1);
- printf("10.1%%3.1= %f/n",result); //0.8
- result=fmod(10.9,3.9);
- printf("10.9%%3.9= %f/n",result); //3.1
【實例】代碼如下。
- #include <stdio.h>
- #include <math.h>
- 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