数学库常用函数
约 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 |
注意:整数绝对值优先用 abs
或 llabs
,浮点数必须用 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 |
信奥赛技巧:若需返回整数类型,需显式转换:
int a = (int)round(3.6); // a = 4
int b = (int)ceil(3.2); // b = 4
注意:负数取整需注意方向:
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 |
应用:计算两点间距离(几何题核心):
// 点(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
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次方):
double power = pow(2, 10); // 1024.0
注意:pow
对整数运算可能有精度误差,需谨慎使用(如 pow(10, 3)
可能返回999.9999999999999,需用 round
修正)。
四、避坑指南
注意事项
头文件与命名空间:
所有函数需包含<cmath>
,且属于std
命名空间(需用std::
前缀或using namespace std;
)。精度问题:
浮点数运算存在精度误差,比较时需用“差值小于极小值”判断(如abs(a - b) < 1e-9
)。
示例:c++double a = sqrt(2) * sqrt(2); // 理论上为2.0,实际可能是1.9999999999999996 if (abs(a - 2.0) < 1e-9) { // 正确判断相等 cout << "相等"; }
数据类型转换:
函数返回值多为double
,若需整数结果,需显式转换(如(int)round(3.5)
)。异常处理:
对定义域有要求的函数(如sqrt(x)
要求x≥0,log(x)
要求x>0),需提前判断输入合法性,避免运行时错误。
五、实战代码
实战
#include <iostream>
#include <cmath> // 包含数学函数
using namespace std;
int main() {
// 绝对值
cout << abs(-5) << endl; // 5
cout << fabs(-3.14) << endl; // 3.14
// 取整
cout << (int)round(3.6) << endl; // 4
cout << (int)ceil(3.2) << endl; // 4
cout << (int)floor(3.8) << endl; // 3
// 平方根与距离
cout << sqrt(25) << endl; // 5.0
cout << hypot(3, 4) << endl; // 5.0(3-4-5三角形)
// 三角函数(弧度计算)
double rad = 90 * M_PI / 180; // 90度转弧度
cout << sin(rad) << endl; // 1.0
// 指数与对数
cout << pow(2, 10) << endl; // 1024.0
cout << log10(100) << endl; // 2.0
return 0;
}
总结
这些数学函数是信奥赛中处理数值计算、几何问题的基础工具,需熟练掌握其用法、精度特性及异常处理,避免因细节错误导致计算结果偏差。