Skip to content

数学库常用函数

约 1339 字大约 4 分钟

2025-06-25

数学函数

数学函数

在C++中,数学函数(如绝对值、取整、三角函数等)需要包含标准库 <cmath> 才能使用,这些函数在信奥赛中常用于几何计算、数值处理等。

一、基础数学函数(信奥赛高频使用)

基础数学函数

1. 绝对值函数

用于计算一个数的绝对值,针对不同数据类型有重载版本:

函数原型作用示例结果
int abs(int x)计算整数x的绝对值abs(-5)5
long long llabs(long long x)计算长整数x的绝对值llabs(-123456789LL)123456789
double fabs(double x)计算浮点数x的绝对值fabs(-3.14)3.14

注意:整数绝对值优先用 absllabs,浮点数必须用 fabs(避免精度问题)。

2. 取整函数(四舍五入、上取整、下取整)

用于对浮点数进行取整操作,信奥赛中几何题和数值计算常涉及:

函数原型作用示例结果
double round(double x)四舍五入到最近整数(返回double)round(3.6)4.0
double ceil(double x)上取整(返回不小于x的最小整数)ceil(3.2)4.0
double floor(double x)下取整(返回不大于x的最大整数)floor(3.8)3.0

信奥赛技巧:若需返回整数类型,需显式转换:

c++
int a = (int)round(3.6);  // a = 4
int b = (int)ceil(3.2);   // b = 4

注意:负数取整需注意方向:

c++
floor(-3.2);  // 结果-4.0(下取整,更小的数)
ceil(-3.8);   // 结果-3.0(上取整,更大的数)

3. 平方根函数

用于计算非负数的平方根,返回double类型:

函数原型作用示例结果
double sqrt(double x)计算x的算术平方根(x≥0)sqrt(25)5.0
double hypot(double x, double y)计算√(x²+y²)(避免溢出)hypot(3,4)5.0

应用:计算两点间距离(几何题核心):

c++
// 点(x1,y1)与(x2,y2)的距离
double dist(double x1, double y1, double x2, double y2) {
    return hypot(x1 - x2, y1 - y2);  // 等价于sqrt((x1-x2)² + (y1-y2)²)
}

二、三角函数(角度需转换为弧度)

C++三角函数的参数和返回值均为弧度(而非角度),信奥赛中几何旋转、角度计算需用到:

函数原型作用示例(参数为弧度)结果(近似)
double sin(double x)正弦函数sin(M_PI / 2)1.0
double cos(double x)余弦函数cos(M_PI)-1.0
double tan(double x)正切函数tan(M_PI / 4)1.0
double asin(double x)反正弦函数(返回弧度)asin(1.0)π/2
double acos(double x)反余弦函数acos(-1.0)π

三角函数

角度转弧度公式:弧度 = 角度 × π / 180

c++
double angle = 90;  // 90度
double rad = angle * M_PI / 180;  // 转换为弧度(π/2)
cout << sin(rad);  // 输出1.0

注意M_PI<cmath> 中定义的π常量(约3.1415926535),部分编译器需定义宏 _USE_MATH_DEFINES 才能使用。

三、对数与指数函数

用于指数运算、对数计算,信奥赛中概率题、复杂度分析可能涉及:

函数原型作用示例结果(近似)
double exp(double x)计算e的x次方(eˣ)exp(1.0)2.718
double pow(double x, double y)计算x的y次方(xʸ)pow(2, 3)8.0
double log(double x)计算自然对数(ln x,x>0)log(exp(1))1.0
double log10(double x)计算常用对数(lg x,x>0)log10(100)2.0

对数与指数函数

应用:快速计算幂次(如2的n次方):

c++
double power = pow(2, 10);  // 1024.0

注意pow 对整数运算可能有精度误差,需谨慎使用(如 pow(10, 3) 可能返回999.9999999999999,需用 round 修正)。

四、避坑指南

注意事项

  1. 头文件与命名空间
    所有函数需包含 <cmath>,且属于 std 命名空间(需用 std:: 前缀或 using namespace std;)。

  2. 精度问题
    浮点数运算存在精度误差,比较时需用“差值小于极小值”判断(如 abs(a - b) < 1e-9)。
    示例:

    c++
    double a = sqrt(2) * sqrt(2);  // 理论上为2.0,实际可能是1.9999999999999996
    if (abs(a - 2.0) < 1e-9) {  // 正确判断相等
        cout << "相等";
    }
  3. 数据类型转换
    函数返回值多为 double,若需整数结果,需显式转换(如 (int)round(3.5))。

  4. 异常处理
    对定义域有要求的函数(如 sqrt(x) 要求x≥0,log(x) 要求x>0),需提前判断输入合法性,避免运行时错误。

五、实战代码

实战

c++

总结

这些数学函数是信奥赛中处理数值计算、几何问题的基础工具,需熟练掌握其用法、精度特性及异常处理,避免因细节错误导致计算结果偏差。