在C++中,常用的数学函数主要通过 <cmath> 头文件提供(C++中也可用 <math.h>,但推荐使用C++风格的头文件)。以下是一些常用的数学函数及其说明:


1. 基本运算

函数 描述 示例
abs(x) 绝对值(整数,<cstdlib> abs(-5)5
fabs(x) 浮点数的绝对值 fabs(-3.14)3.14
fmod(x, y) 浮点数取余 fmod(10.5, 3.0)1.5
remainder(x, y) 带符号的余数(IEEE规范) remainder(10.5, 3.0)-0.5
fmax(x, y) 返回最大值 fmax(2.0, 3.0)3.0
fmin(x, y) 返回最小值 fmin(2.0, 3.0)2.0

2. 指数与对数

函数 描述 示例
exp(x) e的x次方 exp(1.0)~2.718
log(x) 自然对数(ln(x)) log(10.0)~2.302
log10(x) 以10为底的对数 log10(100.0)2.0
pow(x, y) x的y次方 pow(2.0, 3.0)8.0
sqrt(x) 平方根 sqrt(16.0)4.0
cbrt(x) 立方根(C++11) cbrt(27.0)3.0

3. 三角函数(角度单位为弧度)

函数 描述 示例
sin(x) 正弦 sin(M_PI/2)1.0
cos(x) 余弦 cos(M_PI)-1.0
tan(x) 正切 tan(M_PI/4)~1.0
asin(x) 反正弦(结果在[-π/2, π/2]) asin(0.5)~0.523
acos(x) 反余弦(结果在[0, π]) acos(0.5)~1.047
atan(x) 反正切(结果在[-π/2, π/2]) atan(1.0)~0.785
atan2(y, x) 计算y/x的反正切(考虑象限) atan2(1.0, 1.0)~0.785

注意M_PI 是π的常量,但非标准,需自行定义或使用 std::numbers::pi(C++20)。


4. 双曲函数

函数 描述 示例
sinh(x) 双曲正弦 sinh(1.0)~1.175
cosh(x) 双曲余弦 cosh(0.0)1.0
tanh(x) 双曲正切 tanh(1.0)~0.761

5. 取整与舍入

函数 描述 示例
ceil(x) 向上取整 ceil(2.3)3.0
floor(x) 向下取整 floor(2.9)2.0
round(x) 四舍五入 round(2.5)3.0
trunc(x) 截断小数部分 trunc(2.9)2.0
nearbyint(x) 快速舍入(依赖当前模式) nearbyint(2.5) → 依赖设置

6. 其他函数

函数 描述 示例
erf(x) 误差函数 erf(1.0)~0.842
tgamma(x) Gamma函数 tgamma(5.0)24.0(即4!)
hypot(x, y) 计算√(x² + y²)(避免溢出) hypot(3, 4)5.0
copysign(x, y) 将y的符号赋给x copysign(-2.0, 3.0)2.0

注意事项

  1. 兼容性:部分函数(如 cbrthypot)需要C++11或更高版本。

  2. 错误处理:传入无效参数(如 sqrt(-1.0))可能返回 NaN 或触发异常(依赖实现)。

  3. 常量:如 M_PI 需自行定义:

    #define _USE_MATH_DEFINES  // 在MSVC中启用数学常量
    #include <cmath>
    const double PI = std::acos(-1.0); // 或使用C++20的std::numbers::pi

示例代码

#include <iostream>
#include <cmath>

int main() {
double x = 2.5;
std::cout << "ceil(2.5): " << std::ceil(x) << std::endl; // 3.0
std::cout << "pow(2, 3): " << std::pow(2, 3) << std::endl; // 8.0
return 0;
}

如果需要更高级的数学功能(如复数、随机数、线性代数),可以探索 <complex><random> 和第三方库(如Eigen)。