跳轉到內容

C 程式設計/math.h

來自華夏公益教科書,開放的書籍,開放的世界

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

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

所有函式都接受 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) 返回 x 的值,符號與 y 相同
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 的第一類零階貝塞爾函式
j1(x) x 的第一類一階貝塞爾函式
jn(n,x) x 的第一類 n 階貝塞爾函式
scalb(x,y) x * FLT_RADIXy (xydouble)
y0(x) x 的第二類零階貝塞爾函式
y1(x) x 的第二類一階貝塞爾函式
yn(n,x) x 的第二類 n 階貝塞爾函式

double 到字串的轉換函式 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 doublelong 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。
華夏公益教科書