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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/complex/I