名前空間
変種
操作

From cppreference.com
< c‎ | numeric‎ | complex
ヘッダー <complex.h> で定義
#define I /* 未指定 */
(C99以降)

I マクロは、_Complex_I または _Imaginary_I のいずれかに展開されます。実装が虚数型をサポートしていない場合、マクロは常に _Complex_I に展開されます。

プログラムは、マクロ I を undefine してから、おそらく再定義することができます。

目次

[編集] Notes

このマクロは 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++ における虚数単位です)。

[編集] Example

#include <stdio.h>
#include <complex.h>
 
int main(void)
{
    printf("I = %.1f%+.1fi\n", creal(I), cimag(I));
 
    double complex z1 = I * I;     // imaginary unit squared
    printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
 
    double complex z = 1.0 + 2.0*I; // usual way to form a complex number pre-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

[編集] References

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

[編集] See also

虚数単位定数 i
(マクロ定数) [編集]
複素数単位定数 i
(マクロ定数) [編集]
(C11)(C11)(C11)
実部と虚部から複素数を構築する
(関数マクロ) [編集]
C++ ドキュメント operator""i の場合
English 日本語 中文(简体) 中文(繁體)