I
|
定義済みヘッダー
<complex.h>
|
||
|
#define I /* unspecified */
|
(C99以降) | |
I
マクロは、
_Complex_I
または
_Imaginary_I
のいずれかに展開されます。実装が虚数型をサポートしていない場合、このマクロは常に
_Complex_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++における虚数単位です)
例
#include <stdio.h> #include <complex.h> int main(void) { printf("I = %.1f%+.1fi\n", creal(I), cimag(I)); double complex z1 = I * I; // 虚数単位の二乗 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標準 (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)
関連項目
|
(C99)
|
虚数単位定数 i
(マクロ定数) |
|
(C99)
|
複素数単位定数 i
(マクロ定数) |
|
(C11)
(C11)
(C11)
|
実部と虚部から複素数を構築する
(関数マクロ) |
|
C++ドキュメント
for
operator""i
|
|