6.1.4 Дополнительные типы с плавающей запятой
ISO/IEC TS 18661-3:2015 определяет поддержку в C дополнительных типов с плавающей запятой _Floatn и _Floatnx, и GCC поддерживает эти имена типов; набор поддерживаемых типов зависит от целевой архитектуры. Константы этих типов используют суффиксы fn или Fn и fnx или Fnx. Эти имена типов можно использовать вместе с _Complex для объявления комплексных типов.
В качестве расширения GNU C и GNU C++ поддерживают дополнительные типы с плавающей запятой, которые поддерживаются не всеми целевыми платформами.
-
__float128доступен на i386, x86_64, IA-64, LoongArch и hppa HP-UX, а также на целевых платформах PowerPC GNU/Linux с включённым набором векторных скалярных инструкций (VSX).__float128поддерживает 128-битный тип с плавающей запятой. На i386, x86_64, PowerPC, LoongArch и 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 и предоставляет доступ к расширенному формату double IBM, который в настоящее время используется дляlong double. Когда в будущем на PowerPC произойдёт переходlong doubleна__float128,__ibm128останется для преобразований между этими двумя типами.
Поддержка этих дополнительных типов включает арифметические операторы: сложение, вычитание, умножение, деление; унарные арифметические операторы; операторы отношения; операторы равенства; а также преобразования в целые и другие типы с плавающей запятой и обратно. Используйте суффикс ‘w’ или ‘W’ в константном литерале типа __float80 или __ibm128. Для __float128 используйте суффикс ‘q’ или ‘Q’.
Чтобы использовать _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, а также в системах x86 с включённым SSE2 — как для C, так и для C++. В настоящее время 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;
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Floating-Types.html