Spec-Zone.ru › GCC 9

6.13 Полуточная плавающая точка

На целевых платформах 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-A предоставляет аппаратную поддержку преобразований между значениями __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-9.5.0/gcc/Half-Precision.html

Spec-Zone.ru

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