一、C++库函数介绍
C++ 库函数是预先编写好的代码集合,封装了常见功能,用户根据需要可直接调用,以简化开发复杂度。它们按功能分类在不同头文件中,是 C++ 标准库的核心组成部分。
库函数是由 C++ 标准委员会定义的标准化函数,包含以下特点:
标准化:所有编译器必须支持,确保跨平台一致性
模块化:按功能划分到头文件(如 、)
面向对象与过程混合:既有面向对象的流操作(如 cout),也有传统函数(如 sqrt)
C++ 库函数优点
提高效率:避免重复实现基础功能(如排序、文件读写)
减少错误:经过严格测试,可靠性高于自行编写的代码
跨平台兼容:同一代码可在不同系统(Windows/Linux/macOS)运行
性能优化:标准库函数通常经过高度优化,执行效率高
二、C++数学库函数介绍
C++ 标准库中的 (C 语言中为 <math.h>)提供了丰富的数学函数,用于执行各种数值计算。
三、以下是常用数学函数的分类整理,附带示例和注意事项:
1、绝对值函数
引用头文件:
函数原型:std::abs() (模板重载,自动适配类型)
应用举例:
#include
#include
int main() {
auto a = -5; // int
auto b = -7.8; // double
std::cout << "a的绝对值: " << std::abs(a) << std::endl; // 5
std::cout << "b的绝对值: " << std::abs(b) << std::endl; // 7.8
return 0;
}
2、四舍五入函数
引用头文件:
函数原型:std::round()
应用举例:
#include
#include
int main() {
double a = 2.3; // → 2
double b = 2.5; // → 2(向偶数舍入)
double c = 3.7; // → 4
std::cout << std::round(a) << std::endl; // 2
std::cout << std::round(b) << std::endl; // 2
std::cout << std::round© << std::endl; // 4
return 0;
}
3、下取整函数
引用头文件:
函数原型:floor(double x)
应用举例:
#include
#include
int main() {
double a = 3.7;
double b = -2.3;
std::cout << "floor(3.7) = " << std::floor(a) << std::endl; // 输出 3
std::cout << "floor(-2.3) = " << std::floor(b) << std::endl; // 输出 -3
return 0;
}
4、上取整函数
引用头文件:
函数原型:ceil(double x)
应用举例:
#include
#include
using namespace std;
int main() {
double x = 3.5;
cout << "ceil: " << ceil(x) << endl; // 4
return 0;
}
5、平方根函数
引用头文件:
函数原型:sqrt(double x)
应用举例:
#include
#include
int main() {
double a = 64.0;
double b = 2.25;
std::cout << "sqrt(64.0) = " << std::sqrt(a) << std::endl; // 输出 8.0
std::cout << "sqrt(2.25) = " << std::sqrt(b) << std::endl; // 输出 1.5
return 0;
}
6、常用三角函数
引用头文件:
函数原型:
double sin(double x); // 正弦函数(sin(x))
double cos(double x); // 余弦函数(cos(x))
double tan(double x); // 正切函数(tan(x))
double asin(double x); // 反正弦(arcsin(x)),返回值范围 [-π/2, π/2]
double acos(double x); // 反余弦(arccos(x)),返回值范围 [0, π]
double atan2(double y,double x); // 反正切(arctan(y,x)),返回值范围 (-π, π)
应用举例:
#include
#include
int main() {
double angle = 45.0; // 角度值(以度为单位)
double radian = angle * M_PI / 180.0; // 转换为弧度
std::cout << "sin(45°) = " << std::sin(radian) << std::endl; // ≈ 0.7071
std::cout << "cos(45°) = " << std::cos(radian) << std::endl; // ≈ 0.7071
std::cout << "tan(45°) = " << std::tan(radian) << std::endl; // ≈ 1.0
double val = 0.7071; // sin(45°) ≈ 0.7071
std::cout << "arcsin(0.7071) = " << std::asin(val) * 180 / M_PI << “°” << std::endl; // ≈ 45°
std::cout << "arccos(0.7071) = " << std::acos(val) * 180 / M_PI << “°” << std::endl; // ≈ 45°
double y = 1.0, x = 1.0;
std::cout << "atan2(1,1) = " << std::atan2(y, x) * 180 / M_PI << “°” << std::endl; // ≈ 45°
return 0;
}
7、对数函数
引用头文件:
函数原型:
double log(double x); // 自然对数(以 e 为底),计算 ln(x)
double log10(double x); //常用对数(以 10 为底), 计算 log₁₀(x)
double log2(double x); // 以2为底的对数,计算 log₂(x)
应用举例:
#include
#include // 必须包含此头文件
int main() {
double x = 8.0;
// 自然对数
std::cout << “ln(” << x << ") = " << log(x) << std::endl;
// 以10为底的对数
std::cout << “log10(” << x << ") = " << log10(x) << std::endl;
// 以2为底的对数
std::cout << “log2(” << x << ") = " << log2(x) << std::endl;
// 以3为底的对数(使用换底公式)
double base = 3.0;
std::cout << “log” << base << “(” << x << ") = " << log(x) / log(base) << std::endl;
return 0;
}
说明:
关于以任意数为底的对数,C++ 标准库没有直接提供以任意数为底的对数函数,但可以通过换底公式计算。
即:计算 log_b(a) = ln(a) / ln(b)
8、指数函数
引用头文件:
函数原型:
double exp(double x); // 自然指数函数(e 的 x 次方),计算 e^x
double pow(double x, double y); // 幂函数(x 的 y 次方),计算 x^y
double exp2(double x); // 计算 2^x
double expm1(double x); // 计算 e^x - 1,适合 x 接近 0 时使用,精度更高
double pow10(int n); // 计算 10^n
应用举例:
#include
#include // 必须包含此头文件
int main() {
double x = 2.0;
// 自然指数
std::cout << “e^” << x << " = " << exp(x) << std::endl;
// 幂运算
std::cout << x << "^3 = " << pow(x, 3) << std::endl;
std::cout << “3^” << x << " = " << pow(3, x) << std::endl;
// 2的x次方
std::cout << “2^” << x << " = " << exp2(x) << std::endl;
// 10的n次方
std::cout << "10^3 = " << pow10(3) << std::endl;
return 0;
}
注意事项:
对于 pow(x, y),当 x 为负数且 y 不是整数时,结果为 NaN
对于非常大的指数,可能会导致溢出,返回无穷大(inf)
存在针对不同浮点类型的重载版本,如 expf(float)、expl(long double)等
811

被折叠的 条评论
为什么被折叠?



