【翻译】用于科学计算的 C++11/14 新特性之三
总结 C++11/14 中与科学计算相关的新特性。
原文地址 www.numbercrunch.de
【翻译】用于科学计算的 C++11/14 新特性之三
数学函数
C++11/14 引入了一些新的数学函数,这些函数都为 float
、double
和 long double
类型重载,并且定义在头文件 cmath
中。下表总结了这些新函数。
函数 | 含义 |
---|---|
remainder | 除法运算的有符号余数 |
remquo | 除法运算的有符号余数和最后三个二进制位 |
fma | 混合的乘加运算 |
fmax | 两个浮点值的较大者 |
fmin | 两个浮点值的较小者 |
fdim | 两个浮点值的正数差,$\max(0,x−y)$ |
nan, nanf, nanl | 非数(NaN) |
exp2 | 返回 2 的给定次幂,$2^x$ |
expm1 | 返回 e 的给定次幂减一,$e^x−1$ |
log2 | 给定数值的以 2 为底的对数,$\log_2x$ |
log1p | 1 加上给定数值的自然(以 e 为底)对数,$\ln(1+x)$ |
cbrt | 计算立方根,$\sqrt[3]{x}$ |
hypot | 计算两个给定数的平方和的平方根,$\sqrt{x^2+y^2}$ |
asinh | 计算反双曲正弦 |
acosh | 计算反双曲余弦 |
atanh | 计算反双曲正切 |
erf | 误差函数 |
erfc | 补误差函数 |
tgamma | Gamma 函数 |
lgamma | Gamma 函数的自然对数 |
trunc | 绝对值不大于给定值的最接近整数 |
round, lround, llround | 最接近整数,中间情况下向远离零舍入 |
nearbyint | 使用当前舍入模式的最接近整数 |
rint, lrint, llrint | 使用当前舍入模式的最接近整数若结果有别则有异常 |
scalbn, scalbln | 将数乘以 FLT_RADIX 的幂次 |
ilogb | 提取数的指数 |
logb | 提取数的指数 |
nextafter, nexttoward | 趋向给定值的下个可表示浮点值 |
copysign | 复制浮点值的符号 |
fpclassify | 归类给定的浮点值 |
isfinite | 检查给定数是否拥有有限值 |
isinf | 检查给定数是否为无限 |
isnan | 检查给定的数是否 NaN |
isnormal | 检查给定数是否正规 |
signbit | 检查给定数是否为负 |
isgreater | 检查第一个浮点实参是否大于第二个 |
isgreaterequal | 检查第一个浮点实参是否大于或等于第二个 |
isless | 检查第一个浮点实参是否小于第二个 |
islessequal | 检查第一个浮点实参是否小于或等于第二个 |
islessgreater | 检查第一个浮点实参是否小于或大于第二个 |
isunordered | 检查两个浮点值是否无顺序 |
译注:C++ 17 还新增了大量特殊函数
最大值最小值函数
头文件 algorithm
定义了用于确定两个可比较的相同类型(例如数字)对象的最小值或最大值的模板函数。在 C++11 中,引入了这些函数的重载版本,允许通过初始化列表传递任意数量的对象来确定最小值或最大值。此外,minmax
函数可以在单次扫描中同时确定最小值和最大值。以下代码给出了一个示例。
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <algorithm>
int main() {
int i0(0), i1(1), i2(2), i3(3), i4(4);
// determine minimum and maximum seperately
std::cout << "min : " << std::min({i3, i1, i2, i0, i4}) << '\n'
<< "max : " << std::max({i3, i1, i2, i0, i4}) << '\n';
// determine minimum and maximum in a single scan
auto min_max=std::minmax({i3, i1, i2, i0, i4});
std::cout << "min : " << min_max.first << '\n'
<< "max : " << min_max.second << '\n';
}
本文由作者按照 CC BY 4.0 进行授权