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