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
, то такое выражение может создавать значение с мнимой компонентой
+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)
Смотрите также
|
(C99)
|
константа мнимой единицы i
(макроконстанта) |
|
(C99)
|
константа комплексной единицы i
(макроконстанта) |
|
(C11)
(C11)
(C11)
|
создает комплексное число из действительной и мнимой частей
(функциональный макрос) |
|
Документация C++
для
operator""i
|
|