【翻译】用于科学计算的 C++11/14 新特性之二
总结 C++11/14 中与科学计算相关的新特性。
【翻译】用于科学计算的 C++11/14 新特性之二
原文地址 www.numbercrunch.de
复数
模板类 std::complex
和复数函数(定义在头文件 complex
中)在 C++11/14 中得到了扩展。新函数 std::proj
返回复数 $z$ 在黎曼球面上的投影。函数 std::asin
、std::acos
和 std::atan
计算复数参数的反正弦、反余弦和反正切。类似地,std::ahsin
、std::ahcos
和 std::ahtan
计算复数双曲三角函数的反函数。成员函数 real
和 imag
在 C++11 中被重载。在 C++11 中,不仅可以获取复数的实部和虚部,现在也可以通过这些函数设置实部和虚部,如下所示。
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <complex>
int main() {
std::complex<double> z;
// set real and imaginary part
z.real(1);
z.imag(2);
// get real and imaginary part
std::cout << "z = " << z.real() << " + " << z.imag() << "i\n";
}
C++14 引入了字面量 if
、i
和 id
,分别代表单精度、双精度和扩展精度的纯虚数。这些字面量在内联命名空间 std::literals::complex_literals
中声明,使得源代码中的复数表达式更容易编写和阅读,如下例所示。
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <complex>
int main() {
using namespace std::literals;
double pi=std::acos(-1.);
std::complex<double> z=std::exp(1i*pi); // Euler's formula
std::cout << "exp(i, pi) = " << z << '\n';
}
本文由作者按照 CC BY 4.0 进行授权