6.10 Комплексные числа
ISO C99 поддерживает комплексные плавающие типы данных, а в качестве расширения GCC поддерживает их в режиме C90 и в C++. GCC также поддерживает комплексные целочисленные типы данных, которые не являются частью ISO C99. Вы можете объявлять комплексные типы, используя ключевое слово _Complex. В качестве расширения также поддерживается более старое ключевое слово GNU __complex__.
Например, ‘_Complex double x;’ объявляет x как переменную, чьи вещественная и мнимая части имеют тип double. ‘_Complex short int y;’ объявляет y с вещественной и мнимой частями типа short int; это вряд ли окажется полезным, но это показывает, что набор комплексных типов является полным.
Для записи константы с комплексным типом данных используйте суффикс ‘i’ или ‘j’ (любой; они эквивалентны). Например, 2.5fi имеет тип _Complex float и 3i имеет тип _Complex int. Такая константа всегда имеет чисто мнимое значение, но вы можете сформировать любое комплексное значение, которое вам нужно, добавив единицу к вещественной константе. Это расширение GNU; если у вас есть библиотека C, соответствующая стандарту ISO C99 (например, GNU C Library), и вы хотите создать комплексные константы плавающего типа, вы должны включить <complex.h> и использовать макросы I или _Complex_I вместо этого.
Для извлечения вещественной части комплексного выражения exp напишите __real__ exp. Аналогично, используйте __imag__ для извлечения мнимой части. Это расширение GNU; для значений плавающего типа вы должны использовать функции ISO C99 crealf, creal, creall, cimagf, cimag и cimagl, объявленные в <complex.h> и также предоставляемые как встроенные функции GCC.
Оператор ‘~’ выполняет комплексное сопряжение, когда применяется к значению с комплексным типом. Это расширение GNU; для значений плавающего типа вы должны использовать функции ISO C99 conjf, conj и conjl, объявленные в <complex.h> и также предоставляемые как встроенные функции GCC.
GCC может выделять комплексные автоматические переменные несмежным способом; возможно даже, что вещественная часть находится в регистре, а мнимая — в стеке (или наоборот). Только формат отладки DWARF 2 может представлять это, поэтому рекомендуется использовать DWARF 2. Если вы используете формат отладки stabs, GCC описывает несмежную комплексную переменную как две отдельные переменные некомплексного типа. Если фактическое имя переменной foo, то две фиктивные переменные называются foo$real и foo$imag. Вы можете просматривать и устанавливать эти две фиктивные переменные с помощью отладчика.
Далее: Типы с плавающей точкой, Предыдущее: Длинное длинное, Вверх: Расширения C [Оглавление][Указатель]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Complex.html