I
提供: cppreference.com
ヘッダ <complex.h> で定義
|
||
#define I /* unspecified */ |
(C99以上) | |
I
は _Complex_I または _Imaginary_I のいずれかに展開されるマクロです。 処理系が虚数型をサポートしていなければ常に _Complex_I に展開されます。
プログラムはマクロ I を削除したりその後再定義したりしても構いません。
目次 |
[編集] ノート
このマクロは i とは名付けられませんでした。 数学では虚数単位の名前は i
ですが、 i
はすでに多くのCのプログラムでループカウンタ変数などに使われていたためです。
マクロ I は複素数を形成するために x + y*I のような式でよく使われます。
I
が _Complex_I として定義されている場合、こういった式は y
が -0.0
の場合でも虚部が +0.0
の値を作り出す場合があります。 これは分岐切断を持つ複素関数では重要になります。 CMPLX マクロを使うと複素数を正確に構築できます。
GCC では移植性のない拡張として数値リテラルに接尾辞 i
を指定することで虚数定数を記述できます。 1.0fi
、 1.0i
、 1.0li
は GNU C では虚数単位を表します。 C++14 以降、標準 C++ でも同様の手法が採用されています (1.0if
、 1.0i
、 1.0il
は C++ では虚数単位を表します)。
[編集] 例
Run this code
#include <stdio.h> #include <complex.h> int main(void) { printf("I = %.1f%+.1fi\n", creal(I), cimag(I)); double complex z1 = I * I; // 虚数単位の2乗 printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1)); double complex z = 1.0 + 2.0*I; // C11より前の複素数を形成する普通の方法 printf("z = %.1f%+.1fi\n", creal(z), cimag(z)); }
出力:
I = 0.0+1.0i I * I = -1.0+0.0i z = 1.0+2.0i