Spec-Zone.ru › GCC 10

Следующая: Дополнительные типы чисел с плавающей точкой, Предыдущая: Двухсловные целые числа, Вверх: Расширения для семейства языков C [Содержание][Индекс]

6.11 Комплексные числа ¶

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 вместо этого.

Библиотека ISO C++14 также определяет суффикс ‘i’, поэтому код C++14, который включает заголовочный файл ‘<complex>’, не может использовать ‘i’ для расширения GNU. Суффикс ‘j’ по-прежнему имеет значение GNU.

Чтобы извлечь вещественную часть комплексного выражения 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 может представлять это, поэтому рекомендуется использовать DWARF. Если вы используете формат отладки 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-10.5.0/gcc/Complex.html

Spec-Zone.ru

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