名前空間
変種
操作

提供: cppreference.com
< c‎ | numeric‎ | complex
ヘッダ <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.0fi1.0i1.0li は GNU C では虚数単位を表します。 C++14 以降、標準 C++ でも同様の手法が採用されています (1.0if1.0i1.0il は C++ では虚数単位を表します)。

[編集]

#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

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.3.1/6 I (p: 188)
  • G.6/1 I (p: 537)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.3.1/4 I (p: 170)
  • G.6/1 I (p: 472)

[編集] 関連項目

虚数単位 i を表す虚数型の定数
(マクロ定数) [edit]
虚数単位 i を表す複素数型の定数
(マクロ定数) [edit]
(C11)(C11)(C11)
実部と虚部から複素数を構築します
(関数マクロ) [edit]
operator""iC++リファレンス