csp信奥赛C++常用的数学函数详解
在信息学奥林匹克竞赛(信奥赛)中,C++ 的 <cmath> 头文件提供了丰富的数学函数,用于高效处理数学运算。以下是常用系统数学函数的详细讲解及汇总表格。
-
绝对值函数
int abs(int x):返回整数的绝对值(需包含<cstdlib>)。double fabs(double x):返回浮点数的绝对值。- C++11 后推荐使用
std::abs(x),支持重载(如int,double)。
-
幂与根
double pow(double base, double exponent):计算base的exponent次方。double sqrt(double x):返回x的平方根(x ≥ 0)。double cbrt(double x)(C++11):返回立方根。
-
取整函数
double ceil(double x):向上取整(如ceil(2.3) = 3.0)。double floor(double x):向下取整(如floor(2.7) = 2.0)。double round(double x):四舍五入到最接近的整数(如round(2.5) = 3.0)。
-
指数与对数
double exp(double x):计算e^x。double log(double x):自然对数(x > 0)。double log10(double x):以 10 为底的对数。
-
三角函数(参数为弧度)
double sin(double x)、double cos(double x)、double tan(double x)。- 反三角函数:
asin(x)、acos(x)(返回值范围[-π/2, π/2]和[0, π])。 double atan2(double y, double x):计算y/x的反正切(处理所有象限)。
-
其他函数
double fmod(double x, double y):浮点数取模(余数符号同x)。double hypot(double x, double y):计算√(x² + y²)。double fmax(double a, double b)、double fmin(...):返回最大/最小值。
汇总表格
| 函数名 | 功能 | 参数类型 | 返回值类型 | 示例 |
|---|---|---|---|---|
abs(int) | 整数绝对值 | int | int | abs(-5) → 5 |
fabs(double) | 浮点数绝对值 | double | double | fabs(-3.5) → 3.5 |
pow(a, b) | 计算 a^b | double, double | double | pow(2, 3) → 8.0 |
sqrt(x) | 平方根 | double | double | sqrt(16) → 4.0 |
ceil(x) | 向上取整 | double | double | ceil(2.3) → 3.0 |
floor(x) | 向下取整 | double | double | floor(2.7) → 2.0 |
round(x) | 四舍五入 | double | double | round(2.5) → 3.0 |
exp(x) | 计算 e^x | double | double | exp(1) → ~2.718 |
log(x) | 自然对数(ln(x)) | double | double | log(7.389) → ~2.0 |
log10(x) | 以 10 为底的对数 | double | double | log10(100) → 2.0 |
sin(x) | 正弦函数 | double(弧度) | double | sin(π/2) → 1.0 |
atan2(y, x) | 四象限反正切 | double, double | double | atan2(1, 1) → π/4 |
fmod(x, y) | 浮点取模 | double, double | double | fmod(5.5, 2) → 1.5 |
hypot(x, y) | 计算直角斜边 | double, double | double | hypot(3, 4) → 5.0 |
注意事项
- 类型匹配:如
abs对整型,fabs对浮点型,C++11 后可用std::abs自动匹配。 - 错误处理:
sqrt(-1)返回NaN,log(0)返回-inf。 - 精度问题:浮点运算可能存在精度误差,比较时建议用极小量(如
1e-9)。
掌握这些函数能显著提升算法题的编码效率,建议结合实践加深理解。
文末彩蛋:
点击查看老师的个人主页,学习csp信奥赛完整系列课程:
https://edu.csdn.net/lecturer/7901
