Namespaces
Variants

Complex number arithmetic

From cppreference.net

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

(C11以降)

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

複素数型に加えて、3つの虚数型がサポートされる場合があります: double _Imaginary float _Imaginary 、および long double _Imaginary _Imaginary を参照)。ヘッダー <complex.h> がインクルードされると、これら3つの虚数型は double imaginary float 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>

目次

虚数型マクロ
(キーワードマクロ)
(C99)
複素数型マクロ
(キーワードマクロ)
虚数定数
虚数単位定数 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)
複素数の双曲線逆正接を計算する
(関数)

注記

以下の関数名は 将来的に (C23以降) <complex.h> に追加される可能性が予約されており、このヘッダーを含むプログラムでは使用できません: 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標準では逆双曲線関数を「複素数の双曲線逆正弦」などと命名していますが、双曲線関数の逆関数は面積関数です。それらの引数は弧ではなく双曲扇形の面積です。正しい名称は「複素数の逆双曲線正弦」などです。一部の著者は「複素数の面積双曲線正弦」などの表現を使用しています。

複素数または虚数は、その片方の部分が無限大である場合、たとえもう一方の部分がNaNであっても無限大となります。

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

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

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

#include <complex.h>
#include <stdio.h>
#include <tgmath.h>
int main(void)
{
    double complex z1 = I * I;     // 虚数単位の二乗
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
    double complex z2 = pow(I, 2); // 虚数単位の二乗
    printf("pow(I, 2) = %.1f%+.1fi\n", creal(z2), cimag(z2));
    double PI = acos(-1);
    double complex z3 = exp(I * PI); // オイラーの公式
    printf("exp(I*PI) = %.1f%+.1fi\n", creal(z3), cimag(z3));
    double complex z4 = 1 + 2 * I, z5 = 1 - 2 * I; // 共役複素数
    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.h> (p: TBD)
  • 7.25 総称数学 <tgmath.h> (p: TBD)
  • 7.31.1 複素数演算 <complex.h> (p: TBD)
  • 付属書G (規定) IEC 60559互換複素数演算 (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.h> (p: 136-144)
  • 7.25 総称数学 <tgmath.h> (p: 272-273)
  • 7.31.1 複素数演算 <complex.h> (p: 391)
  • 付属書G (規定) IEC 60559互換複素数演算 (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.h> (p: 188-199)
  • 7.25 総称数学 <tgmath.h> (p: 373-375)
  • 7.31.1 複素数演算 <complex.h> (p: 455)
  • 付属書G (規定) IEC 60559互換複素数演算 (p: 532-545)
  • C99標準 (ISO/IEC 9899:1999):
  • 6.10.8/2 __STDC_IEC_559_COMPLEX__ (p: 161)
  • 7.3 複素数演算 <complex.h> (p: 170-180)
  • 7.22 総称数学 <tgmath.h> (p: 335-337)
  • 7.26.1 複素数演算 <complex.h> (p: 401)
  • 付属書G (参考) IEC 60559互換複素数演算 (p: 467-480)

関連項目

C++ documentation for Complex number arithmetic
以下のように翻訳しました:
C++ documentation for 複素数演算
変更点: - 「Complex number arithmetic」を「複素数演算」に翻訳 - HTMLタグ、属性、C++固有の用語("C++ documentation")はそのまま保持 - 書式と構造は完全に維持