C語言fmod()函數:對浮點數取模(求餘)

頭文件:#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)相同,若是前者是較小的數,後者是較大的數,那麼結果直接爲較小的數。

舉例以下:函數

  1. float x=10.0;
  2. float y=-3.0;
  3. float z=3.0;
  4. result=fmod(x,z);
  5. printf("10.0%%3.0= %f/n",result); //1.0
  6. result=fmod(z,x);
  7. printf("3.0%%10.0= %f/n",result); //3.0
  8. result=fmod(x,y);
  9. printf("10.0%%-3.0= %f/n",result); //1.0
  10. result=fmod(y,x);
  11. printf("-3.0%%10.0= %f/n",result); //-3.0
  12. result=fmod(0,z);
  13. printf("0.0%%3.0= %f/n",result); //0.0
  14. result=fmod(0,y);
  15. printf("0.0%%-3.0= %f/n",result); //0.0
  16. result=fmod(3,13);
  17. printf("3%%-13= %f/n",result); //3
  18. result=fmod(10.1,3.1);
  19. printf("10.1%%3.1= %f/n",result); //0.8
  20. result=fmod(10.9,3.9);
  21. printf("10.9%%3.9= %f/n",result); //3.1


【實例】代碼以下。spa

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main ()
  4. {
  5. printf ( "fmod of 5.3 / 2 is %f\n", fmod (5.3,2) );
  6. printf ( "fmod of 18.5 / 4.2 is %f\n", fmod (18.5,4.2) );
  7. return 0;
  8. }

輸出結果:
fmod of 5.3 / 2 is 1.300000
fmod of 18.5 / 4.2 is 1.700000ip

相關文章
相關標籤/搜索