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_RADIX n (n 是 long ) |
scalbn(x,n) |
x * FLT_RADIX n (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_RADIX y (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++ 参考