C 程式設計/math.h
math.h 是 C 程式語言標準庫中的一個頭檔案,用於基本的數學運算。大多數函式都涉及浮點數的使用。C++ 為了相容性也實現了這些函式,並在標頭檔案 cmath 中宣告它們(當前 C++ 標準 C++ 98 中不可用 C99 函式)。
所有接受或返回角度的函式都以弧度為單位工作。
所有函式都接受 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) |
返回具有y符號的x的值 |
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的 0 階第一類貝塞爾函式 |
j1(x) |
x的 1 階第一類貝塞爾函式 |
jn(n,x) |
x的n階第一類貝塞爾函式 |
scalb(x,y) |
x * FLT_RADIXy (x 和 y 都是 double) |
y0(x) |
x的 0 階第二類貝塞爾函式 |
y1(x) |
x的 1 階第二類貝塞爾函式 |
yn(n,x) |
x的n階第二類貝塞爾函式 |
double-to-string 轉換函式 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 時定義它們。
- : 數學宣告 – 基本定義參考,開放組單一 UNIX® 規範,第 7 版
- 從 C 繼承的數學函式的 C++ 參考