Spec-Zone.ru › C

_Imaginary_I

Определено в заголовке <complex.h>
#define _Imaginary_I /* unspecified */
(с 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 (с. 188)
    • G.6/1 _Imaginary_I (с. 537)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.3.1/3 _Imaginary_I (с. 170)
    • G.6/1 _Imaginary_I (с. 472)

См. также

_Complex_I
(C99)
константа комплексной единицы i
(макроконстанта)
I
(C99)
константа комплексной или мнимой единицы i
(макроконстанта)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/complex/Imaginary_I

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API