C 程式設計/math.h
math.h 是 C 程式語言標準庫中的一個頭檔案,用於基本數學運算。大多數函式涉及浮點數的使用。C++ 為了相容性也實現了這些函式,並在標頭檔案 cmath 中宣告它們(C99 函式在當前 C++ 標準(C++ 98)中不可用)。
所有接受或返回角度的函式都以弧度為單位工作。
所有函式都接受 double 作為浮點引數,除非另有說明。在 C99 中,要使用 float 或 long double,分別在名稱後附加 f 或 l。
作用於整數的數學庫函式,例如 abs、labs、div 和 ldiv,在 stdlib.h 標頭檔案中指定。
| 名稱 | 描述 |
|---|---|
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)
| 名稱 | 描述 |
|---|---|
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) |
x 和 y 之間的正差,fmax(x−y, 0) |
fma(x,y,z) |
乘法並加法,(x * y) + z |
fmax(x,y) |
x 和 y 中的最大值 |
fmin(x,y) |
x 和 y 中的最小值 |
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 (n 是 long) |
scalbn(x,n) |
x * FLT_RADIXn (n 是 int) |
tgamma |
伽馬函式 |
trunc |
截斷浮點數 |
額外的函式可能作為 X/Open 系統介面擴充套件提供。這些函式未出現在任何 ANSI 或 ISO C 標準中。
| 名稱 | 描述 |
|---|---|
j0(x) |
x 的第一類零階貝塞爾函式 |
j1(x) |
x 的第一類一階貝塞爾函式 |
jn(n,x) |
x 的第一類 n 階貝塞爾函式 |
scalb(x,y) |
x * FLT_RADIXy (x 和 y 是 double) |
y0(x) |
x 的第二類零階貝塞爾函式 |
y1(x) |
x 的第二類一階貝塞爾函式 |
yn(n,x) |
x 的第二類 n 階貝塞爾函式 |
double 到字串的轉換函式 ecvt、fcvt 和 gcvt 已被棄用,建議使用 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 時定義它們。
- : 數學宣告 – 基本定義參考,The Single UNIX® Specification,版本 7,來自 The Open Group
- 從 C 繼承的 C++ 數學函式參考