文章

C++ cmath

C++ cmath

cmathmath.h

  • math.h是C语言的头文件,没有命名空间的概念,所有函数和宏都是直接定义在全局命名空间里
  • cmath是C++语言的头文件,引入了命名空间的概念,所有函数和常量都定义在std命名空间中,从而避免了潜在的命名冲突

C++ 标准明确推荐使用 <cmath> 而不是 <math.h>

使用时,需先引用

1
#include <cmath>

基本数学函数

函数功能示例
abs(x)计算整数 x 的绝对值abs(-5) // 5
fabs(x)计算浮点数 x 的绝对值fabs(-5.5) // 5.5
fmod(x, y)计算 x 除以 y 的余数fmod(5.3, 2) // 1.3
remainder(x, y)计算 x 除以 y 的余数remainder(5.5, 2) // 1.5
fmax(x, y)返回 x 和 y 中的较大值fmax(3.5, 4.2) // 4.2
fmin(x, y)返回 x 和 y 中的较小值fmin(3.5, 4.2) // 3.5
hypot(x, y)计算 sqrt(xx + yy)hypot(3, 4) // 5

指数和对数函数

函数功能示例
exp(x)计算 e^x,e 为自然对数的底数exp(1) // 2.71828...
log(x)计算 x 的自然对数log(2.71828) // 1
log10(x)计算 x 的以 10 为底的对数log10(100) // 2
pow(x,y)计算 x 的 y 次方pow(2, 3) // 8
sqrt(x)计算 x 的平方根sqrt(16) // 4
cbrt(x)计算 x 的立方根cbrt(27) // 3
expm1(x)计算 e^x - 1expm1(1) // 1.71828...
log1p(x)计算 log(1 + x),适用于 x 接近 0 的情况log1p(0.00001) // 0.00001

三角函数

函数功能示例
sin(x)计算 x 的正弦值,x 以弧度为单位sin(3.14159 / 2) // 1
cos(x)计算 x 的余弦值,x 以弧度为单位cos(3.14159) // -1
tan(x)计算 x 的正切值,x 以弧度为单位tan(0) // 0
asin(x)计算 x 的反正弦值,返回弧度asin(1) // 3.14159/2
acos(x)计算 x 的反余弦值,返回弧度acos(-1) // 3.14159
atan(x)计算 x 的反正切值,返回弧度atan(1) // 3.14159/4
atan2(y,x)计算 y/x 的反正切值,返回弧度atan2(1, 1) // 3.14159/4

双曲函数

函数功能示例
sinh(x)计算 x 的双曲正弦sinh(0) // 0
cosh(x)计算 x 的双曲余弦cosh(0) // 1
tanh(x)计算 x 的双曲正切tanh(1) // 0.7616
asinh(x)计算 x 的反双曲正弦asinh(1) // 0.8814
acosh(x)计算 x 的反双曲余弦,x ≥ 1acosh(1) // 0
atanh(x)计算 x 的反双曲正切,x 在 (-1, 1)atanh(0.5) // 0.5493

取整和浮点数操作

函数功能示例
ceil(x)返回不小于 x 的最小整数ceil(2.3) // 3
floor(x)返回不大于 x 的最大整数floor(2.3) // 2
trunc(x)返回去除小数部分的整数值trunc(2.8) // 2
round(x)返回四舍五入到最接近的整数round(2.5) // 3
lround(x)返回四舍五入到 long 类型lround(2.5) // 3
llround(x)返回四舍五入到 long long 类型llround(2.5) // 3
nearbyint(x)返回舍入到最接近整数(但不引发浮点异常)nearbyint(2.5) // 2
rint(x)返回四舍五入到整数,符合当前舍入方式rint(2.5) // 3
modf(x, &intpart)将 x 的整数和小数部分分离modf(2.3, &intpart)

浮点数检查

函数功能示例
isfinite(x)检查 x 是否为有限值(非无穷大或非 NaN)isfinite(3.0) // true
isinf(x)检查 x 是否为无穷大isinf(1.0 / 0.0) // true
isnan(x)检查 x 是否为 NaNisnan(0.0 / 0.0) // true
isnormal(x)检查 x 是否为正常的非零浮点数isnormal(1.0) // true
signbit(x)检查 x 的符号是否为负signbit(-5.3) // true
本文由作者按照 CC BY 4.0 进行授权