Namespaces
Variants
Actions

Complex number arithmetic

From cppreference.com
< c‎ | numeric

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 C11)

The C programming language, as of C99, supports complex number math with the three built-in types double _Complex, float _Complex, and longdouble _Complex (see _Complex). When the header <complex.h> is included, the three complex number types are also accessible as doublecomplex, floatcomplex, longdoublecomplex.

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

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 C99)
(until C11)

Imaginary numbers are supported if __STDC_IEC_559_COMPLEX__or __STDC_IEC_60559_COMPLEX__(since C23) is defined.

(since C11)
 
Defined in header <complex.h>

Contents

Types
imaginary type macro
(keyword macro)[edit]
(C99)
complex type macro
(keyword macro)[edit]
The imaginary constant
the imaginary unit constant i
(macro constant)[edit]
the complex unit constant i
(macro constant)[edit]
(C99)
the complex or imaginary unit constant i
(macro constant)[edit]
Manipulation
(C11)(C11)(C11)
constructs a complex number from real and imaginary parts
(function macro)[edit]
(C99)(C99)(C99)
computes the real part of a complex number
(function)[edit]
(C99)(C99)(C99)
computes the imaginary part a complex number
(function)[edit]
(C99)(C99)(C99)
computes the magnitude of a complex number
(function)[edit]
(C99)(C99)(C99)
computes the phase angle of a complex number
(function)[edit]
(C99)(C99)(C99)
computes the complex conjugate
(function)[edit]
(C99)(C99)(C99)
computes the projection on Riemann sphere
(function)[edit]
Exponential functions
(C99)(C99)(C99)
computes the complex base-e exponential
(function)[edit]
(C99)(C99)(C99)
computes the complex natural logarithm
(function)[edit]
Power functions
(C99)(C99)(C99)
computes the complex power function
(function)[edit]
(C99)(C99)(C99)
computes the complex square root
(function)[edit]
Trigonometric functions
(C99)(C99)(C99)
computes the complex sine
(function)[edit]
(C99)(C99)(C99)
computes the complex cosine
(function)[edit]
(C99)(C99)(C99)
computes the complex tangent
(function)[edit]
(C99)(C99)(C99)
computes the complex arc sine
(function)[edit]
(C99)(C99)(C99)
computes the complex arc cosine
(function)[edit]
(C99)(C99)(C99)
computes the complex arc tangent
(function)[edit]
Hyperbolic functions
(C99)(C99)(C99)
computes the complex hyperbolic sine
(function)[edit]
(C99)(C99)(C99)
computes the complex hyperbolic cosine
(function)[edit]
(C99)(C99)(C99)
computes the complex hyperbolic tangent
(function)[edit]
(C99)(C99)(C99)
computes the complex arc hyperbolic sine
(function)[edit]
(C99)(C99)(C99)
computes the complex arc hyperbolic cosine
(function)[edit]
(C99)(C99)(C99)
computes the complex arc hyperbolic tangent
(function)[edit]

[edit]Notes

The following function names are potentially(since C23) 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 C23), along with their -f and -l suffixed variants.

Although the C standard names the inverse hyperbolic 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.

[edit]Example

#include <complex.h>#include <stdio.h>#include <tgmath.h>   int main(void){doublecomplex z1 = I * I;// imaginary unit squaredprintf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));   doublecomplex z2 =pow(I, 2);// imaginary unit squaredprintf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));   double PI =acos(-1);doublecomplex z3 =exp(I * PI);// Euler's formulaprintf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));   doublecomplex z4 =1+2* I, z5 =1-2* I;// conjugatesprintf("(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

[edit]References

Extended content
  • C23 standard (ISO/IEC 9899:2024):
  • 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)
  • C17 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)
  • C11 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)
  • C99 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)

[edit]See also

C++ documentation for Complex number arithmetic
close