複素数算術
マクロ定数 |
(C11以上) |
Cプログラミング言語では、C99から、複素数数学と3つの組み込み型 double _Complex
, float _Complex
, long double _Complex
(_Complex を参照) をサポートしています。 ヘッダ <complex.h>
をインクルードすると、3つの複素数型は double complex
, float complex
, long double complex
としても使用できます。
これらの複素数型に加えて、虚数型 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__ が定義されていれば虚数はサポートされています。 |
(C11以上) |
ヘッダ
<complex.h> で定義 | ||
型 | ||
(C99) |
虚数型マクロ (キーワードマクロ) | |
(C99) |
複素数型マクロ (キーワードマクロ) | |
虚数定数 | ||
(C99) |
虚数単位 i を表す虚数型の定数 (マクロ定数) | |
(C99) |
虚数単位 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) |
eを底とする複素指数関数を計算します (関数) | |
(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) |
複素数逆双曲線正接を計算します (関数) |
[編集] ノート
cerf
, cerfc
, cexp2
, cexpm1
, clog10
, clog1p
, clog2
, clgamma
, ctgamma
およびこれらに接尾辞 ~f ~l が付いた関数名は、将来 <complex.h>
に追加するために予約されており、このヘッダをインクルードするプログラムでは使うことができません。
C標準は逆双曲線関数に「complex arc hyperbolic sine」というような名前を付けていますが、双曲線関数の逆関数は面積関数です。 引数は双曲的扇形の面積であり、円弧 (arc) ではありません。 正しくは「complex inverse hyperbolic sine」と呼ぶべきでしょう。 「complex area hyperbolic sine」といった名前を使う人もいます。
実部または虚部のいずれかが無限大であれば、たとえ他方が NaN であっても、その複素数は無限大です。
実部と虚部のいずれも無限大でなく NaN でもなければ、その複素数は有限です。
実部と虚部の両方が正または負のゼロであれば、その複素数はゼロです。
[編集] 例
#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)); }
出力:
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
[編集] 参考文献
- 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)
[編集] 関連項目
複素数算術 の C++リファレンス
|