文章

【翻译】用于科学计算的 C++11/14 新特性之二

总结 C++11/14 中与科学计算相关的新特性。

【翻译】用于科学计算的 C++11/14 新特性之二

原文地址 www.numbercrunch.de

复数

模板类 std::complex 和复数函数(定义在头文件 complex 中)在 C++11/14 中得到了扩展。新函数 std::proj 返回复数 $z$ 在黎曼球面上的投影。函数 std::asinstd::acosstd::atan 计算复数参数的反正弦、反余弦和反正切。类似地,std::ahsinstd::ahcosstd::ahtan 计算复数双曲三角函数的反函数。成员函数 realimag 在 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 引入了字面量 ifiid,分别代表单精度、双精度和扩展精度的纯虚数。这些字面量在内联命名空间 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 进行授权