Namespaces
Variants
Views
Actions

std::complex

From cppreference.com
< cpp‎ | numeric
Revision as of 07:50, 14 July 2016 by Cubbi (Talk | contribs)

 
 
 
 
Defined in header <complex>
template< class T >
class complex;
(1)
template<> class complex<float>;
(2)
template<> class complex<double>;
(3)
template<> class complex<long double>;
(4)

The specializations std::complex<float>, std::complex<double>, and std::complex<long double> are Template:concepts for representing and manipulating complex numbers.

The effect of instantiating the template complex for any other type is unspecified.

Contents

Member types

Member type Definition
value_type T

Member functions

constructs a complex number
(public member function) [edit]
assigns the contents
(public member function) [edit]
accesses the real part of the complex number
(public member function) [edit]
accesses the imaginary part of the complex number
(public member function) [edit]
compound assignment of two complex numbers or a complex and a scalar
(public member function) [edit]

Non-member functions

applies unary operators to complex numbers
(function template) [edit]
performs complex number arithmetic on two complex values or a complex and a scalar
(function template) [edit]
(removed in C++20)
compares two complex numbers or a complex and a scalar
(function template) [edit]
serializes and deserializes a complex number
(function template) [edit]
returns the real part
(function template) [edit]
returns the imaginary part
(function template) [edit]
returns the magnitude of a complex number
(function template) [edit]
returns the phase angle
(function template) [edit]
returns the squared magnitude
(function template) [edit]
returns the complex conjugate
(function template) [edit]
(C++11)
returns the projection onto the Riemann sphere
(function template) [edit]
constructs a complex number from magnitude and phase angle
(function template) [edit]
Exponential functions
complex base e exponential
(function template) [edit]
complex natural logarithm with the branch cuts along the negative real axis
(function template) [edit]
complex common logarithm with the branch cuts along the negative real axis
(function template) [edit]
Power functions
complex power, one or both arguments may be a complex number
(function template) [edit]
complex square root in the range of the right half-plane
(function template) [edit]
Trigonometric functions
computes sine of a complex number (sin(z))
(function template) [edit]
computes cosine of a complex number (cos(z))
(function template) [edit]
computes tangent of a complex number (tan(z))
(function template) [edit]
computes arc sine of a complex number (arcsin(z))
(function template) [edit]
computes arc cosine of a complex number (arccos(z))
(function template) [edit]
computes arc tangent of a complex number (arctan(z))
(function template) [edit]
Hyperbolic functions
computes hyperbolic sine of a complex number (sinh(z))
(function template) [edit]
computes hyperbolic cosine of a complex number (cosh(z))
(function template) [edit]
computes hyperbolic tangent of a complex number (tanh(z))
(function template) [edit]
computes area hyperbolic sine of a complex number (arsinh(z))
(function template) [edit]
computes area hyperbolic cosine of a complex number (arcosh(z))
(function template) [edit]
computes area hyperbolic tangent of a complex number (artanh(z))
(function template) [edit]

Non-static data members

For any object z of type complex<T>, reinterpret_cast<T(&)[2]>(z)[0] is the real part of z and reinterpret_cast<T(&)[2]>(z)[1] is the imaginary part of z.

For any pointer to an element of an array of complex<T> named p and any valid array index i, reinterpret_cast<T*>(p)[2*i] is the real part of the complex number p[i], and reinterpret_cast<T*>(p)[2*i + 1] is the imaginary part of the complex number p[i]

These requirements essentially limit implementation of each of the three specializations of std::complex to declaring two and only two non-static data members, of type value_type, with the same member access, which hold the real and the imaginary components, respectively.

The intent of this requirement is to preserve binary compatibility between the C++ library complex number types and the C language complex number types (and arrays thereof), which have an identical object representation requirement.

(since C++11)

Literals

Defined in inline namespace std::literals::complex_literals
a std::complex literal representing purely imaginary number
(function) [edit]

Example

#include <iostream>
#include <iomanip>
#include <complex>
#include <cmath>
 
int main()
{
    using namespace std::complex_literals;
    std::cout << std::fixed << std::setprecision(1);
 
    std::complex<double> z1 = 1i * 1i;     // imaginary unit squared
    std::cout << "i * i = " << z1 << '\n';
 
    std::complex<double> z2 = std::pow(1i, 2); // imaginary unit squared
    std::cout << "pow(i, 2) = " << z2 << '\n';
 
    double PI = std::acos(-1);
    std::complex<double> z3 = std::exp(1i * PI); // Euler's formula
    std::cout << "exp(i * pi) = " << z3 << '\n';
 
    std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i; // conjugates
    std::cout << "(1+2i)*(1-2i) = " << z4*z5 << '\n';
}

Output:

i * i = (-1.0,0.0)
pow(i, 2) = (-1.0,0.0)
exp(i * pi) = (-1.0,0.0)
(1+2i)*(1-2i) = (5.0,0.0)

See also

C documentation for Complex number arithmetic