csp信奥赛C++常用的数学函数详解
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