6.12 Дополнительные типы с плавающей точкой
ISO/IEC TS 18661-3:2015 определяет поддержку C для дополнительных типов с плавающей точкой _Floatn и _Floatnx, и GCC поддерживает эти имена типов; набор поддерживаемых типов зависит от целевой архитектуры. Эти типы не поддерживаются при компиляции C++. Константы с этими типами используют суффиксы fn или Fn и fnx или Fnx. Эти имена типов могут использоваться вместе с _Complex для объявления комплексных типов.
В качестве расширения GNU C и GNU C++ поддерживают дополнительные типы с плавающей точкой, которые не поддерживаются всеми целевыми платформами.
-
__float128доступен на i386, x86_64, IA-64 и hppa HP-UX, а также на целевых платформах PowerPC GNU/Linux, которые поддерживают набор инструкций векторного скаляра (VSX).__float128поддерживает 128-битный тип с плавающей точкой. На i386, x86_64, PowerPC и IA-64, кроме HP-UX,__float128является псевдонимом для_Float128. На hppa и IA-64 HP-UX,__float128является псевдонимом дляlong double. -
__float80доступен на целевых платформах i386, x86_64 и IA-64 и поддерживает 80-битный (XFmode) тип с плавающей точкой. Он является псевдонимом для имени типа_Float64xна этих целевых платформах. -
__ibm128доступен на целевых платформах PowerPC и предоставляет доступ к расширенному формату двойной точности IBM, который является текущим форматом, используемым дляlong double. Когдаlong doubleперейдет на__float128на PowerPC в будущем,__ibm128сохранится для использования в преобразованиях между этими двумя типами.
Поддержка этих дополнительных типов включает арифметические операторы: сложение, вычитание, умножение, деление; унарные арифметические операторы; операторы сравнения; операторы равенства; и преобразования к целочисленным и другим типам с плавающей точкой. Используйте суффикс «w» или «W» в литеральной константе типа __float80 или типа __ibm128. Используйте суффикс «q» или «Q» для _float128.
Для использования _Float128, __float128, и __ibm128 на системах PowerPC Linux необходимо использовать опцию -mfloat128. Ожидается, что в будущих версиях GCC _Float128 и __float128 будут включены автоматически.
Тип _Float128 поддерживается на всех системах, где поддерживается __float128 или где long double имеет формат IEEE binary128. Тип _Float64x поддерживается на всех системах, где поддерживается __float128. Тип _Float32 поддерживается на всех системах, поддерживающих IEEE binary32; типы _Float64 и _Float32x поддерживаются на всех системах, поддерживающих IEEE binary64. Тип _Float16 поддерживается на системах AArch64 по умолчанию и на системах ARM, когда формат IEEE для 16-битных типов с плавающей точкой выбран с помощью -mfp16-format=ieee. В настоящее время GCC не поддерживает _Float128x ни на одной системе.
На целевых платформах i386, x86_64, IA-64 и HP-UX вы можете объявить комплексные типы, используя соответствующий внутренний комплексный тип, XCmode для типа __float80 и TCmode для типа __float128:
typedef _Complex float __attribute__((mode(TC))) _Complex128; typedef _Complex float __attribute__((mode(XC))) _Complex80;
На целевых платформах PowerPC Linux VSX вы можете объявить комплексные типы, используя соответствующий внутренний комплексный тип, KCmode для типа __float128 и ICmode для типа __ibm128:
typedef _Complex float __attribute__((mode(KC))) _Complex_float128; typedef _Complex float __attribute__((mode(IC))) _Complex_ibm128;
Далее: Полуточная точность, Предыдущий: Комплексные числа, Вверх: Расширения C [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/Floating-Types.html