Spec-Zone.ru › C

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)

См. также

_Imaginary_I
(C99)
мнимая единица константа i
(макро константа)
_Complex_I
(C99)
комплексная единица константа i
(макро константа)
CMPLXCMPLXFCMPLXL
(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

Spec-Zone.ru

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