複素数演算
|
実装によってマクロ定数 |
(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 としてもアクセスできます。
標準の算術演算子 +、-、*、/ は、実数型、複素数型、虚数型と任意の組み合わせで使用できます。
|
|
(C99以降) (C11まで) |
|
虚数は、 |
(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) |
複素自然指数関数を計算する (関数) | |
| (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
[編集] 参照
| 拡張コンテンツ |
|---|
|
[編集] 関連項目
| C++ ドキュメント 複素数演算
|