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