math.h常用的數學函數
初寫:2005.05.24, 更新日期:2012.06.04
 
參考資料:
 
  • #include <math.h> /* 符合ANSI標準的數學函數 */:
    函數名稱 功能 使用格式說明
     abs(x) 求整數絕對值 求整數x的絕對值
     acos(x) 計算-1~+1的反餘弦值 求x的cos反函數
     asin(x) 計算-1~+1的反正弦值 求x的sin反函數
     atan(x) 計算-1~+1的反正切值 使用前需先偵測x!=0
     ceil(x) >=浮點數的最小整數 求不會比x小的整數
     cos(x) 以弳度為單位之餘弦  
     exp(x) 求浮點數的之指數值  
     fabs(x) 求浮點數絕對值 求浮點數x的絕對值
     floor(x) <=浮點數的最大整數  
     fmod(x,y) 求浮點數的餘數 求浮點數x被y除後的餘數
     log(x) 求自然數為底的對數值 求以e為底的log x
     log10(x) 以10為底的自然對數值 求以10為底的log x
     modf( ) 將浮點數分成整數與小數  
     pow(x,y) 計算次方 x的y次方
     sin(x) 求正弦值 求x的sin,x須為弳度
     sqrt(x) 開平方根 x開根號
     tan(x) 求正切值 求x的tan,x須為弳度

  • #include <stdlib.h> /* 符合ANSI標準的數學函數 */
    函數名稱 功能 呼叫格式
     div(x,y)  兩整數除法,得商、餘數  
     rand  傳回0-32767的亂數值  int rand(void)
     srand  設定亂數起始種子  void srand(int x)

  • 範例
    #include <stdio.h>
    #include <math.h>
    main(void)
    {
    int a;
    printf("F(x)=x^3, Input x:");
    scanf(" %d", &a);

    printf("F(%d)=%f \n",a, pow(a,3) );
    }

    編譯沒有成功?
    /tmp/ccalvMPY.o: In function `main':
    /tmp/ccalvMPY.o(.text+0x40): undefined reference to `pow'

    沒錯,並沒有編成功! 「undefined reference to 'pow'」
    C語言將檔案編成.obj檔後,要連結pow時,
    沒有找到 pow函數的相關定義!

    因為 unix C 中,pow 函數是定義在 libm.so 函式庫中,
    不像一般DevC++或Turbo C是放在編譯器所在目錄/lib下,
    所以,C無法在編譯連結時,找到相關的函數檔連結執行檔,
    必須在編譯時,告訴C函數庫的位置。

    我們只需加上指令參數如下:
    gcc  filename.c  -lm

    gcc 程式檔名.c -lm -L/lib -L/usr/lib

    特別注意, -lm 拆成兩部份來看,
    -l 是請編譯器在編譯時加入某函式庫(library),
    m 是指 libm.so 這個函庫。
    所以,-lm 是告訴gcc使用 libm.so (或 libm.a) 函式庫.

    至於 -L 所接的路徑
    表示要在 /lib 或 /usr/lib 位置找所呼叫的函式庫 libm.so。

  • 練習:輸入一個整數,輸出其開根號後的值(到小數點下三位)
    Input an Integer n: 2
    The square root of n= 1.414

  • rand( ) 亂數函數
    • 功能:亂數函數,產生亂數。
    • 載入檔:stdlib.h
    • 呼叫:int rand(void);
    • 傳回值:亂數數列(在232區間)中的一個數值
    • 範例: 請見亂數函數網頁

  • srand( ) 亂數種子
    • 功能:產生亂數種子Seed。
    • 載入檔:stdlib.h
    • 呼叫:void srand( unsigned int seed);
    • 傳回值:無
    • 範例: 請見亂數函數網頁

  • atan( ) 反正切
    • 功能:可求pi
    • 載入檔:math.h
    • 呼叫:double atan(double x);
    • 傳回值:雙精倍 x的arc tangent值
    • 範例:printf("%.14f\n", 4*atan(1));


曾聖超老師製作