oj mrJudge
Toggle navigation
  • Login
    • Forget Password
      Login
User Image

Hello, Stranger

Guest
  • Analysis Mode
  • Problems
    • All Problems
    • Latest Problems
  • Join Us Now
  • Registration
  • Contact Us
  • Infomation
  • C++ Reference
  • About
    • Help
    • Terms of Use
    • Technical Specifications
    • Credits

C++ Reference as of 28 May 2018

Complex number arithmetic - cppreference.com

Complex number arithmetic

From cppreference.com
< c‎ | numeric
 
C
Language
Headers
Type support
Program utilities
Variadic function support
Error handling
Dynamic memory management
Date and time utilities
Strings library
Algorithms
Numerics
Input/output support
Localization support
Atomic operations (C11)
Thread support (C11)
Technical Specifications
 
Numerics
Common mathematical functions
Floating-point environment
Complex number arithmetics
Random number generation
Type-generic math
 
Complex number arithmetic
Types and the imaginary constant
complex
_Complex_I
CMPLX
imaginary
_Imaginary_I
I
Manipulation
cimag
creal
carg
cabs
conj
cproj
Power and exponential functions
cexp
clog
cpow
csqrt
Trigonometric functions
ccos
csin
ctan
cacos
casin
catan
Hyperbolic functions
ccosh
csinh
ctanh
cacosh
casinh
catanh
 
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 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 C99)
(until C11)

Imaginary numbers are supported if __STDC_IEC_559_COMPLEX__ is defined.

(since C11)
Defined in header <complex.h>
Types
imaginary
(C99)
imaginary type macro
(macro constant)
complex
(C99)
complex type macro
(macro constant)
The imaginary constant
_Imaginary_I
(C99)
the imaginary unit constant i
(macro constant)
_Complex_I
(C99)
the complex unit constant i
(macro constant)
I
(C99)
the complex or imaginary unit constant i
(macro constant)
Manipulation
CMPLXCMPLXFCMPLXL
(C11)(C11)(C11)
constructs a complex number from real and imaginary parts
(function macro)
crealcrealfcreall
(C99)(C99)(C99)
computes the real part of a complex number
(function)
cimagcimagfcimagl
(C99)(C99)(C99)
computes the imaginary part a complex number
(function)
cabscabsfcabsl
(C99)(C99)(C99)
computes the magnitude of a complex number
(function)
cargcargfcargl
(C99)(C99)(C99)
computes the phase angle of a complex number
(function)
conjconjfconjl
(C99)(C99)(C99)
computes the complex conjugate
(function)
cprojcprojfcprojl
(C99)(C99)(C99)
computes the projection on Riemann sphere
(function)
Exponential functions
cexpcexpfcexpl
(C99)(C99)(C99)
computes the complex base-e exponential
(function)
clogclogfclogl
(C99)(C99)(C99)
computes the complex natural logarithm
(function)
Power functions
cpowcpowfcpowl
(C99)(C99)(C99)
computes the complex power function
(function)
csqrtcsqrtfcsqrtl
(C99)(C99)(C99)
computes the complex square root
(function)
Trigonometric functions
csincsinfcsinl
(C99)(C99)(C99)
computes the complex sine
(function)
ccosccosfccosl
(C99)(C99)(C99)
computes the complex cosine
(function)
ctanctanfctanl
(C99)(C99)(C99)
computes the complex tangent
(function)
casincasinfcasinl
(C99)(C99)(C99)
computes the complex arc sine
(function)
cacoscacosfcacosl
(C99)(C99)(C99)
computes the complex arc cosine
(function)
catancatanfcatanl
(C99)(C99)(C99)
computes the complex arc tangent
(function)
Hyperbolic functions
csinhcsinhfcsinhl
(C99)(C99)(C99)
computes the complex hyperbolic sine
(function)
ccoshccoshfccoshl
(C99)(C99)(C99)
computes the complex hyperbolic cosine
(function)
ctanhctanhfctanhl
(C99)(C99)(C99)
computes the complex hyperbolic tangent
(function)
casinhcasinhfcasinhl
(C99)(C99)(C99)
computes the complex arc hyperbolic sine
(function)
cacoshcacoshfcacoshl
(C99)(C99)(C99)
computes the complex arc hyperbolic cosine
(function)
catanhcatanhfcatanhl
(C99)(C99)(C99)
computes the complex arc hyperbolic tangent
(function)

Notes

The following function names are 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, and ctgamma, 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 components is infinite, even if the other component is NaN.

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

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

Example

Run this code
#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

  • 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.3.1/2 __STDC_NO_COMPLEX__ (p: 188)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • 7.31.1 Complex arithmetic <complex.h> (p: 455)
  • B.2 Complex <complex.h> (p: 475-477)
  • Annex G (normative) IEC 60559-compatible complex arithmetic (p: 532-545)
  • G.1/1 __STDC_IEC_559_COMPLEX__ (p: 532)
  • 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)
  • B.2 Complex <complex.h> (p: 419-420)
  • Annex G (informative) IEC 60559-compatible complex arithmetic (p: 467-480)
  • G.1/1 __STDC_IEC_559_COMPLEX__ (p: 467)

See also

C++ documentation for Complex number arithmetic
Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/numeric/complex&oldid=77419"
Navigation
  • Online version
  • Offline version retrieved 2018-04-14 22:05.
  • This page was last modified on 25 March 2015, at 05:32.
  • This page has been accessed 89,832 times.
mrJudge 31.05.2018 (F43DD)
Copyright © 2018 mrJudge. All rights reserved.

Under Construction

Stats Tab Content

Under Construction too