名前空間
変種
操作

複素数演算

From cppreference.com
< c‎ | numeric

実装によってマクロ定数 __STDC_NO_COMPLEX__ が定義されている場合、複素数型、ヘッダー <complex.h>、およびここに記載されているすべての名前は提供されません。

(C11 以降)

Cプログラミング言語は、C99以降、3つの組み込み型 double _Complexfloat _Complex、および long double _Complex (_Complexを参照) で複素数演算をサポートしています。ヘッダー <complex.h> がインクルードされている場合、これら3つの複素数型は double complexfloat complexlong double complex としてもアクセスできます。

複素数型に加えて、3つの虚数型もサポートされる場合があります: double _Imaginaryfloat _Imaginary、および long double _Imaginary (_Imaginaryを参照)。ヘッダー <complex.h> がインクルードされている場合、これら3つの虚数型は double imaginaryfloat imaginary、および long double imaginary としてもアクセスできます。

標準の算術演算子 +-*/ は、実数型、複素数型、虚数型と任意の組み合わせで使用できます。

__STDC_IEC_559_COMPLEX__ を定義するコンパイラが推奨されますが、虚数をサポートすることは必須ではありません。POSIXは、虚数サポートを識別するためにマクロ _Imaginary_I が定義されているかどうかを確認することを推奨しています。

(C99以降)
(C11まで)

虚数は、__STDC_IEC_559_COMPLEX__ または __STDC_IEC_60559_COMPLEX__(C23以降) が定義されている場合にサポートされます。

(C11 以降)
 
ヘッダー <complex.h> で定義

目次

虚数型マクロ
(キーワードマクロ) [編集]
複素数型マクロ
(キーワードマクロ) [編集]
虚数定数
虚数単位定数 i
(マクロ定数) [編集]
複素数単位定数 i
(マクロ定数) [編集]
(C99)
複素数または虚数単位定数 i
(マクロ定数) [編集]
操作
(C11)(C11)(C11)
実部と虚部から複素数を構築する
(関数マクロ) [編集]
(C99)(C99)(C99)
複素数の実部を計算する
(関数) [編集]
(C99)(C99)(C99)
複素数の虚部を計算する
(関数) [編集]
(C99)(C99)(C99)
複素数の絶対値を計算する
(関数) [編集]
(C99)(C99)(C99)
複素数の偏角を計算する
(関数) [編集]
(C99)(C99)(C99)
共役複素数を計算する
(関数) [編集]
(C99)(C99)(C99)
リーマン球への射影を計算する
(関数) [編集]
指数関数
(C99)(C99)(C99)
複素自然指数関数を計算する
(関数) [編集]
(C99)(C99)(C99)
複素自然対数関数を計算する
(関数) [編集]
べき乗関数
(C99)(C99)(C99)
複素冪関数を計算する
(関数) [編集]
(C99)(C99)(C99)
複素平方根を計算する
(関数) [編集]
三角関数
(C99)(C99)(C99)
複素サインを計算する
(関数) [編集]
(C99)(C99)(C99)
複素コサインを計算する
(関数) [編集]
(C99)(C99)(C99)
複素タンジェントを計算する
(関数) [編集]
(C99)(C99)(C99)
複素アークサインを計算する
(関数) [編集]
(C99)(C99)(C99)
複素アークコサインを計算する
(関数) [編集]
(C99)(C99)(C99)
複素アークタンジェントを計算する
(関数) [編集]
双曲線関数
(C99)(C99)(C99)
複素双曲線サインを計算する
(関数) [編集]
(C99)(C99)(C99)
複素双曲線コサインを計算する
(関数) [編集]
(C99)(C99)(C99)
複素双曲線タンジェントを計算する
(関数) [編集]
(C99)(C99)(C99)
複素アーク双曲線サインを計算する
(関数) [編集]
(C99)(C99)(C99)
複素アーク双曲線コサインを計算する
(関数) [編集]
(C99)(C99)(C99)
複素アーク双曲線タンジェントを計算する
(関数) [編集]

[編集] 注釈

以下の関数名は、<complex.h> への将来の追加のために 潜在的に(C23以降) 予約されており、このヘッダーをインクルードするプログラムでは使用できません: 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(C23以降)、およびそれらの -f と -l 接尾辞付きバリアント。

C標準では逆双曲線関数を「complex arc hyperbolic sine」などと名付けていますが、双曲線関数の逆関数は面積関数です。その引数は双曲線扇形の面積であり、弧ではありません。正しい名前は「complex inverse hyperbolic sine」などです。一部の著者は「complex area hyperbolic sine」などを使用しています。

複素数または虚数は、その一方の要素が無限大であり、もう一方の要素がNaNであっても無限大です。

複素数または虚数は、両方の要素が無限大でもNaNでもない場合に有限です。

複素数または虚数は、両方の要素が正または負のゼロである場合にゼロです。

MSVCは <complex.h> ヘッダーを提供しますが、複素数をネイティブ型としてではなく、標準Cの複素数型と互換性のない struct として実装しており、+-*/ 演算子をサポートしていません。

[編集]

#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));
}

出力

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

[編集] 参照

拡張コンテンツ
  • C23標準 (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標準 (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標準 (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標準 (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)

[編集] 関連項目

C++ ドキュメント 複素数演算
English 日本語 中文(简体) 中文(繁體)