## Complex numbers

The template class `std::complex`

and functions for complex numbers (defined in the header file `complex`

) have been extended in C++11/14. The new function `std::proj`

returns the projection of the complex number $z$ onto the Riemann sphere. The functions `std::asin`

, `std::acos`

and `std::atan`

calculate the inverse of the sine, cosine and tangent for complex arguments and similarly `std::ahsin`

, `std::ahcos`

and `std::ahtan`

compute the inverses of the complex hyperbolic trigonometric functions. The member functions `real`

and `imag`

are overloaded in C++11. In C++11 it is not only possible to get the real and the imaginary part of a complex number, the real and the imaginary may now also be set by these functions as illustrated below.

#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 introduces the literals `if`

, `i`

and `id`

, which represent pure imaginary numbers in single, double and extended precision, respectively. These literals are declared in the inline namespace `std::literals::complex_literals`

and make complex expressions in source code more easy to write and read as the following example shows.

#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'; }