On this page
Complex number arithmetic
If the macro constant   | 
      (since C11) | 
The C programming language, as of C99, 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   | 
      (since C99) (until C11)  | 
     
Imaginary numbers are supported if   | 
      (since C11) | 
Defined in header <complex.h> | 
     |
|---|---|
Types | 
     |
| 
       
        (C99)
         | 
      imaginary type macro  (keyword macro)  | 
     
| 
       
        (C99)
         | 
      complex type macro  (keyword macro)  | 
     
The imaginary constant | 
     |
| 
       
        (C99)
         | 
      the imaginary unit constant i  (macro constant)  | 
     
| 
       
        (C99)
         | 
      the complex unit constant i  (macro constant)  | 
     
| 
       
        (C99)
         | 
      the complex or imaginary unit constant i  (macro constant)  | 
     
Manipulation | 
     |
| 
       
        (C11)(C11)(C11)
         | 
      constructs a complex number from real and imaginary parts  (function macro)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the real part of a complex number  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the imaginary part a complex number  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the magnitude of a complex number  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the phase angle of a complex number  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex conjugate  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the projection on Riemann sphere  (function)  | 
     
Exponential functions | 
     |
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex base-e exponential  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex natural logarithm  (function)  | 
     
Power functions | 
     |
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex power function  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex square root  (function)  | 
     
Trigonometric functions | 
     |
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex sine  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex cosine  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex tangent  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex arc sine  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex arc cosine  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex arc tangent  (function)  | 
     
Hyperbolic functions | 
     |
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex hyperbolic sine  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex hyperbolic cosine  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex hyperbolic tangent  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex arc hyperbolic sine  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex arc hyperbolic cosine  (function)  | 
     
| 
       
        (C99)(C99)(C99)
         | 
      computes the complex arc hyperbolic tangent  (function)  | 
     
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 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.
Example
#include <stdio.h>
#include <complex.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
- 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)
 
See also
| C++ documentation for Complex number arithmetic | 
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
 https://en.cppreference.com/w/c/numeric/complex