Namespaces
Variants

I

From cppreference.net
Определено в заголовочном файле <complex.h>
#define I /* unspecified */
(начиная с C99)

Макрос I раскрывается либо в _Complex_I , либо в _Imaginary_I . Если реализация не поддерживает мнимые типы, то макрос всегда раскрывается в _Complex_I .

Программа может отменить определение и, возможно, затем переопределить макрос I .

Содержание

Примечания

Макрос не назван i , что является названием мнимой единицы в математике, потому что имя i уже использовалось во многих программах на C, например, в качестве переменной-счётчика цикла.

Макрос I часто используется для формирования комплексных чисел с помощью выражений вида x + y * I . Если I определён как _Complex_I , то такое выражение может создавать значение с мнимой компонентой +0.0 даже когда y равен -0.0 , что существенно для функций работы с комплексными числами, имеющими разрезы ветвей. Макрос CMPLX предоставляет способ точного построения комплексного числа.

GCC предоставляет непереносимый механизм, который позволяет задавать мнимые константы с суффиксом i на целочисленных литералах: 1.0fi , 1.0i и 1.0li являются мнимыми единицами в GNU C. Аналогичный подход является частью стандарта C++ начиная с C++14 ( 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;     // 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

Ссылки

  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.3.1/6 I (стр. 188)
  • G.6/1 I (стр. 537)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.3.1/4 I (стр. 170)
  • G.6/1 I (стр. 472)

Смотрите также

константа мнимой единицы i
(макроконстанта)
константа комплексной единицы i
(макроконстанта)
(C11) (C11) (C11)
создает комплексное число из действительной и мнимой частей
(функциональный макрос)