Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      Complex number arithmetic

      From cppreference.com
      <c‎ |numeric
       
       
       
      Complex number arithmetic
      Types and the imaginary constant
      (C99)
      (C99)    
      (C11)
      (C99)
      Manipulation
      (C99)
      (C99)
      (C99)
      (C99)
      (C99)
      (C99)
      Power and exponential functions
      (C99)
      (C99)
      (C99)
      (C99)
      Trigonometric functions
      (C99)
      (C99)
      (C99)
      (C99)
      (C99)
      (C99)
      Hyperbolic functions
      (C99)
      (C99)
      (C99)
      (C99)
      (C99)
      (C99)
       

      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 typesdouble _Complex,float _Complex, andlongdouble _Complex (see_Complex). When the header<complex.h> is included, the three complex number types are also accessible asdoublecomplex,floatcomplex,longdoublecomplex.

      In addition to the complex types, the three imaginary types may be supported:double _Imaginary,float _Imaginary, andlongdouble _Imaginary (see_Imaginary). When the header<complex.h> is included, the three imaginary types are also accessible asdoubleimaginary,floatimaginary, andlongdoubleimaginary.

      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 arepotentially(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 asstructs, which are incompatible with standard C complex types and do not support the+,-,*,/ operators.

      [edit]Example

      Run this code
      #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.0ipow(I, 2) = -1.0+0.0iexp(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 forComplex number arithmetic
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/numeric/complex&oldid=180042"

      [8]ページ先頭

      ©2009-2025 Movatter.jp