跳轉到內容

C 程式設計/math.h

來自 Wikibooks,開放世界中的開放書籍

math.h 是 C 程式語言標準庫中的一個頭檔案,用於基本的數學運算。大多數函式都涉及浮點數的使用。C++ 為了相容性也實現了這些函式,並在標頭檔案 cmath 中宣告它們(當前 C++ 標準 C++ 98 中不可用 C99 函式)。

所有接受或返回角度的函式都以弧度為單位工作。

所有函式都接受 double 作為浮點引數,除非另有說明。在 C99 中,要使用 floatlong double,分別在名稱後附加 fl

對整數進行操作的數學庫函式,如 abslabsdivldiv,在 stdlib.h 標頭檔案中指定。

C99 之前的函式

[編輯 | 編輯原始碼]
名稱 描述
acos 反餘弦
asin 反正弦
atan 單引數反正切
atan2 雙引數反正切
ceil 向上取整,小於等於引數的最小整數
cos 餘弦
cosh 雙曲餘弦
cbrt 立方根
exp 指數函式
fabs 絕對值(浮點數的)
floor 向下取整,大於等於引數的最大整數
fmod 浮點餘數: x - y*(int)(x/y)
frexp 將浮點數分解為尾數和指數
ldexp 用指數縮放浮點數(參見文章)
log 自然對數
log10 以 10 為底的對數
modf(x,p) 返回x的小數部分並將整數部分儲存在指標p指向的位置
pow(x,y) x提高到y的冪,xy
sin 正弦
sinh 雙曲正弦
sqrt 平方根
tan 正切
tanh 雙曲正切]]

(有關將字串轉換為浮點數的函式(atof()、strtod() 等),請參見 C 程式設計/C 參考/stdlib.h。)

(有關將浮點數轉換為字串的函式(snprintf()、itoa() 等),請參見 C 程式設計/C 參考/stdio.h 和 C_Programming/C_Reference/stdlib.h#itoa。)

C99 函式

[編輯 | 編輯原始碼]
名稱 描述
acosh 反雙曲餘弦
asinh 反雙曲正弦
atanh 反雙曲正切
cbrt 立方根
copysign(x,y) 返回具有y符號的x的值
erf 誤差函式
erfc 互補誤差函式
exp2(x) 將 2 提高到x的冪,2x
expm1(x) x的指數減 1,ex − 1
fdim(x,y) xy之間的正差,fmax(xy, 0)
fma(x,y,z) 乘加,(x * y) + z
fmax(x,y) xy的最大值
fmin(x,y) xy的最小值
hypot(x,y) 斜邊,sqrt(x2 + y2)
ilogb 浮點值的指數,轉換為 int
lgamma 伽馬函式絕對值的自然對數
llrint 四捨五入到整數(返回 long long),使用當前舍入模式
lrint 四捨五入到整數(返回 long),使用當前舍入模式
llround 四捨五入到整數(返回 long long
lround 四捨五入到整數(返回 long
log1p(x) 1 + x的自然對數
log2 以 2 為底的對數
logb 從浮點數中提取指數
nan(s) 返回 NaN,可能使用字串引數
nearbyint 將浮點數四捨五入到最接近的整數
nextafter(x,y) 返回x之後的下一個可表示的值(朝著y方向)
nexttoward(x,y) nextafter 相同,除了y始終是 long double
remainder(x,y) 計算餘數,如 IEC 60559 所要求
remquo(x,y,p) remainder 相同,但將商數(作為 int)儲存在指標p的目標位置
rint 四捨五入到整數(返回 double),使用當前舍入模式
round 四捨五入到整數(返回 double),將一半情況四捨五入到遠離零的方向
scalbln(x,n) x * FLT_RADIXn (nlong)
scalbn(x,n) x * FLT_RADIXn (nint)
tgamma 伽馬函式
trunc 截斷浮點數

XSI 擴充套件

[編輯 | 編輯原始碼]

可能還提供額外的函式作為 X/Open 系統介面擴充套件。這些在任何 ANSI 或 ISO C 標準中都不存在。

名稱 描述
j0(x) x的 0 階第一類貝塞爾函式
j1(x) x的 1 階第一類貝塞爾函式
jn(n,x) xn階第一類貝塞爾函式
scalb(x,y) x * FLT_RADIXy (xy 都是 double)
y0(x) x的 0 階第二類貝塞爾函式
y1(x) x的 1 階第二類貝塞爾函式
yn(n,x) xn階第二類貝塞爾函式

double-to-string 轉換函式 ecvtfcvtgcvt 已被棄用,取而代之的是 sprintf

數學常數(非標準)

[編輯 | 編輯原始碼]
名稱 描述
M_E 自然對數的底。
M_LOG2E M_E 以 2 為底的對數。
M_LOG10E M_E 以 10 為底的對數。
M_LN2 2 的自然對數。
M_LN10 10 的自然對數。
M_PI 圓周率,圓周長與其直徑的比值。
M_PI_2 圓周率除以二。
M_PI_4 圓周率除以四。
M_1_PI 圓周率的倒數(1/pi)。
M_2_PI 圓周率倒數的兩倍。
M_2_SQRTPI 圓周率平方根的倒數的兩倍。
M_SQRT2 2 的平方根。
M_SQRT1_2 2 的平方根的倒數(也是 1/2 的平方根)。

所有值都是 double 型別。作為擴充套件,GNU C 庫還定義了這些型別的 long double 常量。long double 宏在其名稱後附加小寫“l”:M_El、M_PIl 等。這些僅在定義 _GNU_SOURCE 時可用。

注意:某些程式使用名為 PI 的常量,它與 M_PI 的值相同。此常量不是標準的;它可能出現在一些舊的 AT&T 標頭檔案中,並在 Stroustrup 的 C++ 著作中有所提及。它侵犯了使用者名稱空間,因此 GNU C 庫沒有定義它。修復為期望它的程式很簡單:在整個程式中將 PI 替換為 M_PI,或在編譯器命令列中新增“ -DPI=M_PI”。

雖然這些常量很常見,但它們不是 C 標準的一部分,因此大多數現代編譯器需要顯式定義(例如 Microsoft Visual C++ 中的 _USE_MATH_DEFINES[1])才能在包含 math.h 時定義它們。

[編輯 | 編輯原始碼]

參考文獻

[編輯 | 編輯原始碼]
  1. 數學常量,MSDN。
華夏公益教科書