Complex number arithmetic

From cppreference.com
< c‎ | numeric
 
 
 
Complex number arithmetic
Types and the imaginary constant
(哋它亢99)
(哋它亢99)    
(哋它亢11)
(哋它亢99)
(哋它亢99)
(哋它亢99)
Manipulation
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
Power and exponential functions
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
Trigonometric functions
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
Hyperbolic functions
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
(哋它亢99)
 

If the macro constant __STDC_NO_COMPLEX__ is defined by the implementation, the complex types, the header <complex.h> and all of the names listed here are not provided.

(since 哋它亢11)

The C programming language, as of 哋它亢99, supports complex number math with the three built-in types double _Complex, float _Complex, and long double _Complex (see _Complex). When the header <complex.h> is included, the three complex number types are also accessible as double complex, float complex, long double complex.

In addition to the complex types, the three imaginary types may be supported: double _Imaginary, float _Imaginary, and long double _Imaginary (see _Imaginary). When the header <complex.h> is included, the three imaginary types are also accessible as double imaginary, float imaginary, and long double imaginary.

Standard arithmetic operators +, -, *, / can be used with real, complex, and imaginary types in any combination.

A compiler that defines __STDC_IEC_559_COMPLEX__ is recommended, but not required to support imaginary numbers. POSIX recommends checking if the macro _Imaginary_I is defined to identify imaginary number support.

(since 哋它亢99)
(until 哋它亢11)

Imaginary numbers are supported if __STDC_IEC_559_COMPLEX__ or __STDC_IEC_60559_COMPLEX__(since 哋它亢23) is defined.

(since 哋它亢11)
Defined in header <complex.h>
Types
(哋它亢99)
imaginary type macro
(keyword macro)
(哋它亢99)
complex type macro
(keyword macro)
The imaginary constant
(哋它亢99)
the imaginary unit constant i
(macro constant)
(哋它亢99)
the complex unit constant i
(macro constant)
(哋它亢99)
the complex or imaginary unit constant i
(macro constant)
Manipulation
(哋它亢11)(哋它亢11)(哋它亢11)
constructs a complex number from real and imaginary parts
(function macro)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the real part of a complex number
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the imaginary part a complex number
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the magnitude of a complex number
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the phase angle of a complex number
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex conjugate
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the projection on Riemann sphere
(function)
Exponential functions
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex base-e exponential
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex natural logarithm
(function)
Power functions
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex power function
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex square root
(function)
Trigonometric functions
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex sine
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex cosine
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex tangent
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex arc sine
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex arc cosine
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex arc tangent
(function)
Hyperbolic functions
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex hyperbolic sine
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex hyperbolic cosine
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex hyperbolic tangent
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex arc hyperbolic sine
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex arc hyperbolic cosine
(function)
(哋它亢99)(哋它亢99)(哋它亢99)
computes the complex arc hyperbolic tangent
(function)

Notes

The following function names are potentially(since 哋它亢23) reserved for future addition to complex.h and are not available for use in the programs that include that header: cerf, cerfc, cexp2, cexpm1, clog10, clog1p, clog2, clgamma, ctgamma, csinpi, ccospi, ctanpi, casinpi, cacospi, catanpi, ccompoundn, cpown, cpowr, crootn, crsqrt, cexp10m1, cexp10, cexp2m1, clog10p1, clog2p1, clogp1(since 哋它亢23), along with their -f and -l suffixed variants.

Although the C standard names the inverse hyperbolics with "complex arc hyperbolic sine" etc., the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct names are "complex inverse hyperbolic sine" etc. Some authors use "complex area hyperbolic sine" etc.

A complex or imaginary number is infinite if one of its parts is infinite, even if the other part is NaN.

A complex or imaginary number is finite if both parts are neither infinities nor NaNs.

A complex or imaginary number is a zero if both parts are positive or negative zeroes.

While MSVC does provide a <complex.h> header, it does not implement complex numbers as native types, but as structs, which are incompatible with standard C complex types and do not support the +, -, *, / operators.

Example

#include <complex.h>
#include <stdio.h>
#include <tgmath.h>
 
int main(void)
{
    double complex z1 = I * I;     // imaginary unit squared
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
 
    double complex z2 = pow(I, 2); // imaginary unit squared
    printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
 
    double PI = acos(-1);
    double complex z3 = exp(I * PI); // Euler's formula
    printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
 
    double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // conjugates
    printf("(1+2i)*(1-2i) = %.1f%+.1fi\n", creal(z4 * z5), cimag(z4 * z5));
}

Output:

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

References

  • 哋它亢23 standard (ISO/IEC 9899:2023):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: TBD)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: TBD)
  • 7.3 Complex arithmetic <complex.h> (p: TBD)
  • 7.25 Type-generic math <tgmath.h> (p: TBD)
  • 7.31.1 Complex arithmetic <complex.h> (p: TBD)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (p: TBD)
  • 哋它亢17 standard (ISO/IEC 9899:2018):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: 128)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: 128)
  • 7.3 Complex arithmetic <complex.h> (p: 136-144)
  • 7.25 Type-generic math <tgmath.h> (p: 272-273)
  • 7.31.1 Complex arithmetic <complex.h> (p: 391)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (p: 469-479)
  • 哋它亢11 standard (ISO/IEC 9899:2011):
  • 6.10.8.3/1/2 __STDC_NO_COMPLEX__ (p: 177)
  • 6.10.8.3/1/2 __STDC_IEC_559_COMPLEX__ (p: 177)
  • 7.3 Complex arithmetic <complex.h> (p: 188-199)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • 7.31.1 Complex arithmetic <complex.h> (p: 455)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (p: 532-545)
  • 哋它亢99 standard (ISO/IEC 9899:1999):
  • 6.10.8/2 __STDC_IEC_559_COMPLEX__ (p: 161)
  • 7.3 Complex arithmetic <complex.h> (p: 170-180)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • 7.26.1 Complex arithmetic <complex.h> (p: 401)
  • Annex G (informative) IEC 60559-compatible complex arithmetic (p: 467-480)

See also