Namespaces
Variants

_Imaginary_I

From cppreference.net
定義済みヘッダー <complex.h>
#define _Imaginary_I /* 未指定 */
(C99以降)

_Imaginary_I マクロは、虚数単位の値を持つ const float _Imaginary 型の値に展開されます。

C言語における純虚数のサポートと同様に、このマクロは虚数がサポートされている場合にのみ定義されます。

__STDC_IEC_559_COMPLEX__ を定義するコンパイラは、虚数のサポートが必須ではありません。POSIX はマクロ _Imaginary_I が定義されているかどうかをチェックして虚数サポートを識別することを推奨しています。

(C99以降)
(C11まで)

__STDC_IEC_559_COMPLEX__ が定義されている場合、虚数はサポートされます。

(C11以降)

目次

注記

このマクロは、複素数の実部と虚部から正確に組み立てる方法を提供します。例えば、 ( double complex ) ( ( double ) x + _Imaginary_I * ( double ) y ) のように使用します。このパターンはC11で CMPLX マクロとして標準化されました。 _Complex_I が代わりに使用された場合、この式は虚部の負のゼロを正のゼロに変換することが許容されることに注意してください。

#include <stdio.h>
#include <complex.h>
#include <math.h>
int main(void)
{
    double complex z1 = 0.0 + INFINITY * _Imaginary_I;
    printf("z1 = %.1f%+.1fi\n", creal(z1), cimag(z1));
    double complex z2 = 0.0 + INFINITY * _Complex_I;
    printf("z2 = %.1f%+.1fi\n", creal(z2), cimag(z2));
}

出力:

z1 = 0.0+Infi 
z2 = NaN+Infi

参考文献

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

関連項目

複素数単位定数 i
(マクロ定数)
(C99)
複素数または虚数単位定数 i
(マクロ定数)