math.h
<math.h> 提供数学函数:三角函数、指数对数、幂函数、取整、绝对值等。C99 大幅扩展了数学库,增加了双曲线函数、误差函数、伽马函数、浮点分类函数等。
基本函数
#include <math.h>
/* 三角函数(参数为弧度) */
sin(M_PI / 2); /* 1.0 */
cos(0.0); /* 1.0 */
tan(M_PI / 4); /* 1.0 */
/* 反三角函数 */
asin(1.0); /* π/2 */
acos(1.0); /* 0 */
atan(1.0); /* π/4 */
atan2(y, x); /* 考虑象限的 arctan */
/* 指数和对数 */
exp(1.0); /* e */
log(M_E); /* 1.0 */
log10(100.0); /* 2.0 */
/* 幂函数 */
pow(2.0, 10.0); /* 1024.0 */
sqrt(2.0); /* 1.414... */
cbrt(8.0); /* 2.0(C99) */
/* 取整 */
ceil(2.3); /* 3.0 */
floor(2.7); /* 2.0 */
round(2.5); /* 3.0(C99) */
trunc(2.7); /* 2.0(C99) */
/* 绝对值 */
fabs(-3.14); /* 3.14 */
C99 新增
/* 双曲函数 */
sinh(0.0); /* 0.0 */
cosh(0.0); /* 1.0 */
/* 误差函数 */
erf(1.0); /* ~0.8427 */
erfc(1.0); /* ~0.1573 */
/* 浮点分类 */
isnan(NAN); /* 非数检查 */
isinf(INFINITY); /* 无穷检查 */
isfinite(1.0); /* 有限数检查 */
/* 特殊常量 */
M_PI; /* π */
M_E; /* e */
NAN; /* 非数 */
INFINITY; /* 正无穷 */
常见错误
角度而非弧度:
/* 错误 */
sin(90.0); /* 90 弧度,不是 90 度 */
/* 正确 */
sin(90.0 * M_PI / 180.0); /* 转换为弧度 */
忽略定义域错误:
sqrt(-1.0); /* 定义域错误,返回 NaN */
log(0.0); /* 范围错误,返回 -Inf */
/* 正确 */
if (x >= 0.0) {
result = sqrt(x);
} else {
/* 错误处理 */
}
最佳实践
- 三角函数参数用弧度
- 检查数学函数的输入范围
- 用
isnan、isinf检查结果有效性 - C99 数学函数需要链接数学库(加
-lm) - 浮点比较用 epsilon