6.12 Полуточная точность с плавающей запятой
На целевых платформах ARM и AArch64 компилятор GCC поддерживает полуточную (16-битовую) плавающую запятую через тип __fp16, определенный в расширениях языка C для ARM. На системах ARM вам необходимо явно включить этот тип с помощью параметра командной строки -mfp16-format, чтобы использовать его.
Целевые платформы ARM поддерживают две несовместимые представления значений полуточной точности с плавающей запятой. Вы должны выбрать одно из представлений и использовать его последовательно в вашей программе.
Указание -mfp16-format=ieee выбирает формат IEEE 754-2008. Этот формат может представлять нормализованные значения в диапазоне от 2^{-14} до 65504. Точность значащих цифр составляет 11 бит, что приблизительно соответствует 3 десятичным знакам.
Указание -mfp16-format=alternative выбирает альтернативный формат ARM. Это представление похоже на формат IEEE, но не поддерживает бесконечности или NaN. Вместо этого диапазон показателей расширен, так что этот формат может представлять нормализованные значения в диапазоне от 2^{-14} до 131008.
Порт GCC для AArch64 поддерживает только формат IEEE 754-2008 и не требует использования параметра командной строки -mfp16-format.
Тип __fp16 может использоваться только в качестве аргумента для встроенных функций, определенных в <arm_fp16.h>, или в качестве формата хранения. Для целей арифметики и других операций значения __fp16 в выражениях C или C++ автоматически повышаются до float.
Целевая платформа ARM предоставляет аппаратную поддержку преобразований между значениями __fp16 и float в качестве расширения для VFP и NEON (Advanced SIMD), а начиная с ARMv8, аппаратная поддержка преобразований между __fp16 и double значениями. GCC генерирует код, использующий эти аппаратные инструкции, если вы компилируете с параметрами для выбора FPU, который их предоставляет; например, -mfpu=neon-fp16 -mfloat-abi=softfp, в дополнение к параметру -mfp16-format для выбора формата полуточной точности.
Поддержка типа данных __fp16 на уровне языка независима от того, генерирует ли GCC код, использующий аппаратные инструкции с плавающей запятой. В случаях, когда аппаратная поддержка не указана, GCC реализует преобразования между __fp16 и другими типами как вызовы библиотеки.
Рекомендуется, чтобы переносимый код использовал тип _Float16, определенный в ISO/IEC TS 18661-3:2015. См. Типы с плавающей точкой.
Далее: Десятичная плавающая точка, Предыдущее: Типы с плавающей точкой, Наверх: Расширения языка C [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/Half-Precision.html