Windows apps
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.
We recommend using Visual Studio 2017

# <complex>

Visual Studio 2015

Defines the container template class complex and its supporting templates.

## Syntax

```#include <complex>

```

## Remarks

A complex number is an ordered pair of real numbers. In purely geometrical terms, the complex plane is the real, two-dimensional plane. The special qualities of the complex plane that distinguish it from the real plane are due to its having an additional algebraic structure. This algebraic structure has two fundamental operations:

• Addition defined as (a, b) + (c, d) = (a + c, b + d)

• Multiplication defined as (a, b) * (c, d) = (ac - bd, ad + bc)

The set of complex numbers with the operations of complex addition and complex multiplication are a field in the standard algebraic sense:

• The operations of addition and multiplication are commutative and associative and multiplication distributes over addition exactly as it does with real addition and multiplication on the field of real numbers.

• The complex number (0, 0) is the additive identity and (1, 0) is the multiplicative identity.

• The additive inverse for a complex number (a, b) is (-a, -b), and the multiplicative inverse for all such complex numbers except (0, 0) is

(a/(a2 + b2), -b/(a2 + b2)

By representing a complex number z = (a, b) in the form z = a + bi, where i2 = -1, the rules for the algebra of the set of real numbers can be applied to the set of complex numbers and to their components. For example:

(1 + 2i) * (2 + 3i) = 1*(2 + 3i) + 2i*(2 + 3i) = (2 + 3i) + (4i + 6i2)

= (2 –6) + (3 + 4)i = -4 + 7i

The system of complex numbers is a field, but it is not an ordered field. There is no ordering of the complex numbers as there is for the field or real numbers and its subsets, so inequalities cannot be applied to complex numbers as they are to real numbers which is an ordered field.

There are three common forms of representing a complex number z:

• Cartesian: z = a + bi

• Polar: z = r (cos + isin)

• Exponential: z = r * exp()

The terms used in these standard representations of a complex number are referred to as follows:

• The real Cartesian component or real part a.

• The imaginary Cartesian component or imaginary part b.

• The modulus or absolute value of a complex number Ρ.

• The argument or phase angle .

Unless otherwise specified, functions that can return multiple values are required to return a principal value for their arguments greater than –pi and less than or equal to +pi to keep them single valued. All angles need to be expressed in radians, where there are 2 pi radians (360 degrees) in a circle.

### Functions

absCalculates the modulus of a complex number.
argExtracts the argument from a complex number.
conjReturns the complex conjugate of a complex number.
cosReturns the cosine of a complex number.
coshReturns the hyperbolic cosine of a complex number.
expReturns the exponential function of a complex number.
imagExtracts the imaginary component of a complex number.
logReturns the natural logarithm of a complex number.
log10Returns the base 10 logarithm of a complex number.
normExtracts the norm of a complex number.
polarReturns the complex number, which corresponds to a specified modulus and argument, in Cartesian form.
powEvaluates the complex number obtained by raising a base that is a complex number to the power of another complex number.
realExtracts the real component of a complex number.
sinReturns the sine of a complex number.
sinhReturns the hyperbolic sine of a complex number.
sqrtReturns the square root of a complex number.
tanReturns the tangent of a complex number.
tanhReturns the hyperbolic tangent of a complex number.

### Operators

operator!=Tests for inequality between two complex numbers, one or both of which may belong to the subset of the type for the real and imaginary parts.
operator*Multiplies two complex numbers, one or both of which may belong to the subset of the type for the real and imaginary parts.
operator+Adds two complex numbers, one or both of which may belong to the subset of the type for the real and imaginary parts.
operator-Subtracts two complex numbers, one or both of which may belong to the subset of the type for the real and imaginary parts.
operator/Divides two complex numbers, one or both of which may belong to the subset of the type for the real and imaginary parts.
operator<<A template function that inserts a complex number into the output stream.
operator==Tests for equality between two complex numbers, one or both of which may belong to the subset of the type for the real and imaginary parts.
operator>>A template function that extracts a complex value from the input stream.

### Classes

complex<double>The explicitly specialized template class describes an object that stores an ordered pair of objects both of type double, first representing the real part of a complex number and the second representing the imaginary part.
complex<float>The explicitly specialized template class describes an object that stores an ordered pair of objects both of type float, first representing the real part of a complex number and the second representing the imaginary part.
complex<long double>The explicitly specialized template class describes an object that stores an ordered pair of objects both of type `long double`, first representing the real part of a complex number and the second representing the imaginary part.
complexThe template class describes an object used to represent the complex number system and perform complex arithmetic operations.

### Literals

The <complex> header defines the following user-defined literals which create a complex number with the real part being zero and the imaginary part being the value of the input parameter.

`constexpr complex<long double> operator""il(long double d)il(long double d)`

`constexpr complex<long double> operator""il(unsigned long long d)`
Returns `complex<long double>{0.0L, static_cast<long double>(d)}`
`constexpr complex<double> operator""i(long double d)`

`constexpr complex<double> operator""i(unsigned long long d)`
Returns: `complex<double>{0.0, static_cast<double>(d)}`.
`constexpr complex<float> operator""if(long double d)`

`constexpr complex<float> operator""if(unsigned long long d)`
Returns: `complex<float>{0.0f, static_cast<float>(d)}`.