1.数学函数
2026-08-16 10:27:38
发布于:浙江
导读:
我们都知道c++的算法很多,用到数学计算的也很多,所以c+ +库中的函数也就很多。数学函数在库中占比比较高而且难以其记住功能,所以本期盘点C+ +的数学函数。我将他们整理成了大板块,供大家记忆,废话少说进入正题:
1.基本算法
| 函数 | 功能 |
|---|---|
| abs | 求整数绝对值 |
| max | 求两个数较大 |
| min | 求两个数较小 |
| fabs | 求浮点数绝对值 |
| fmod | 浮点数余数 |
| remainder | IEEE(电气电子工程师学会)标准的余数 |
| remquo | 余数+商的符号位和低位 |
| fma | 融合乘加 |
| fmin | 求两个浮点数较小 |
| fmax | 求两个浮点数较大 |
2.指数与对数
| 函数 | 功能 |
|---|---|
| exp | e的x次幂 |
| exp2 | 2的x次幂 |
| log | 返回自然对数(e为底) |
| log2 | 返回对数(2为底) |
| log10 | 返回常用对数(10为底) |
3.幂与开方
| 函数 | 功能 |
|---|---|
| pow | x的y次幂 |
| sqrt | 求开平方 |
| cbrt | 求开立方 |
| hypot(x,y) | 返回斜边长 |
4.三角函数
| 函数 | 功能 |
|---|---|
| sin | 求正弦 |
| cos | 求余弦 |
| tan | 求正切 |
| asin | 求反正弦 |
| acos | 求反余弦 |
| atan | 求反正切 |
5.取整函数
| 函数 | 功能 |
|---|---|
| ceil | 向上取整 |
| floor | 向下取整 |
| trunc | 整数部分向0取整 |
| round | 四舍五入 |
| lround | 返回long的四舍五入 |
| llround | 返回longlong的四舍五入 |
6.特殊函数
| 函数 | 功能 |
|---|---|
| tgamma | Γ(x)伽马函数 |
| beta | 贝塔函数 |
| hermine | 埃尔米特多项式 |
7.数值与常数(常数c++20起)
| 函数 | 功能 |
|---|---|
| gcd | 最大公约数(c++17) |
| lcm | 最小公倍数(c++17) |
| accumulate | 累加 |
| pi | $ π$ |
| e | 自然对数底 |
| phi | |
| egamma | |
| inv_pi | $ π的倒数$ |
| sqrt3 | √3 |
| sqrt2 | √2 |
| ln2 | ln2 |
| ln10 | ln10 |
| 备注: | 内置常数头文件<numbers> |
下一期:
可能有遗漏,麻烦大家指出
麻烦点个赞哦【刷商城积分罐头也行】

全部评论 7
IEEE 不是搞那啥浮点数的吗?
2026-07-28 来自 江西
1min和max似乎是数列最值,时间复杂度O(n)2026-07-27 来自 上海
1谢谢
2026-07-27 来自 浙江
0可以用
max({a, b, c})这种写法2026-07-27 来自 上海
0
似乎可以讲细一点
2026-07-27 来自 江西
1谢谢
2026-07-27 来自 浙江
0
这么好的总结整理,怎么没人看??太可惜了!
顶!
2026-07-27 来自 浙江
1谢谢支持
2026-07-27 来自 浙江
2
支持~
2026-07-27 来自 浙江
1谢谢支持
2026-07-27 来自 浙江
1
2026-07-27 来自 浙江
1目前有几处明确错误,另外遗漏也比较多。
必须修改的错误
原文 问题 建议改成 requo❌ 函数名不存在 remquofmin 求两个浮点数较大❌ 写反了 fmin求较小值fmax 求两个浮点数较小❌ 写反了 fmax求较大值(C++26起) hypot 三维❌ 版本错误 三参数 hypot(x,y,z)C++17 就有truns❌ 拼写错误 trunchermine❌ 拼写错误 hermitepi Π❌ 数学符号错误 pi对应 π,不是 Πe e自然对数❌ 含义错误 e是自然常数/自然对数的底egammma❌ 多了一个 m egammagcd/lcm (C++20)❌ 版本错误 gcd/lcm是 C++17accumulate (C++20)❌ 不是 C++20 新增 它早在 C++20 之前就已存在 当前标准草案中明确列出了
remquo、trunc、fmin、fmax和三参数hypot;WG21 的 C17 特性记录也明确把三参数hypot标为 C17 特性。([eel.is][1])gcd、lcm是为 C17 提交并采用的<numeric>功能,而非 C20。还有一个容易误导初学者的地方:
round= 四舍五入不算完全准确。C++ 的
round是舍入到最近整数,恰好在中间时向远离 0 的方向取整。因此例如round(-1.5)得到-2。lround和llround的核心区别还在于返回类型分别是long和long long。标准<cmath>同时还有nearbyint、rint、lrint、llrint等不同舍入函数。1周前 来自 浙江
0遗漏比较明显
如果标题叫“常用 C++ 数学函数”,现在这样可以;如果叫“大全”,则缺得比较多。单是
<cmath>就还包括这些很常用的:- 三角:
atan2 - 双曲函数:
sinh、cosh、tanh、asinh、acosh、atanh - 指数对数:
expm1、log1p、logb - 浮点分解:
frexp、ldexp、modf、scalbn - 特殊函数:
erf、erfc、lgamma - 取整:
nearbyint、rint、lrint、llrint - 浮点操作:
copysign、nextafter、nexttoward、fdim - 浮点判断:
isnan、isinf、isfinite、isnormal、signbit、fpclassify - C++20:
lerp
这些都可以直接在当前
<cmath>标准库 synopsis 中看到。你的“特殊函数”一栏尤其不完整。除了
beta、hermite,标准库还包括assoc_laguerre、assoc_legendre、comp_ellint_1/2/3、cyl_bessel_i/j/k、cyl_neumann、ellint_1/2/3、expint、laguerre、legendre、riemann_zeta、sph_bessel、sph_legendre、sph_neumann等。数学特殊函数是 C++17 加入的重要一组功能。<numbers>常数也漏了一半C++20 的
<numbers>不只有你列的几个。标准提供的主要常数包括:e、log2e、log10e、pi、inv_pi、inv_sqrtpi、ln2、ln10、sqrt2、sqrt3、inv_sqrt3、egamma、phi。所以这一栏建议改成:
常量 含义 std::numbers::e自然常数 e std::numbers::pi圆周率 π std::numbers::inv_pi1/π std::numbers::phi黄金比例 φ std::numbers::egamma欧拉–马歇罗尼常数 γ std::numbers::sqrt2√2 std::numbers::sqrt3√3 std::numbers::ln2ln 2 std::numbers::ln10ln 10 另外,不建议把所有东西都归到一个“C++数学函数”头文件概念下。它们实际上分属不同头文件:
max/min主要在<algorithm>,绝大多数浮点数学函数和特殊函数在<cmath>,gcd/lcm/accumulate在<numeric>,数学常量在<numbers>。这样整理文章会比按纯数学概念分类更适合 C++ 初学者。当前标准也将<cmath>、数值算法和数学常量作为不同设施组织。最值得马上改的 10 个地方就是:
requo → remquo、truns → trunc、hermine → hermite、egammma → egamma、fmin/fmax说明对调、hypot 三参数 C++26 → C++17、gcd/lcm C++20 → C++17、pi Π → π、e 自然对数 → 自然对数的底、把accumulate从“C++20 新增”里移出去。改完这些,准确度就会高很多。
1周前 来自 浙江
0- 三角:
1周前 来自 浙江
0谢谢指出
1周前 来自 浙江
0



























有帮助,赞一个