Spec-Zone.ru › GCC 4

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. Вы можете просмотреть и установить эти две фиктивные переменные с помощью отладчика.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Complex.html

Spec-Zone.ru

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