I
From cppreference.com
| ヘッダー <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.0fi、1.0i、1.0li は GNU C における虚数単位です。同様のアプローチは C++14 以降の標準 C++ の一部です(1.0if、1.0i、1.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
| (C99) |
虚数単位定数 i (マクロ定数) |
| (C99) |
複素数単位定数 i (マクロ定数) |
| (C11)(C11)(C11) |
実部と虚部から複素数を構築する (関数マクロ) |
| C++ ドキュメント
operator""i の場合 | |