- #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));
|
|