Spec-Zone.ru › GCC 5

6.12 Полнота точности с плавающей запятой

На целевых устройствах ARM GCC поддерживает плавающую запятую с половинной точностью (16 бит) через тип __fp16. Для использования этого типа необходимо явно включить его с помощью опции командной строки -mfp16-format.

ARM поддерживает две несовместимые представления значений с плавающей запятой половинной точности. Вы должны выбрать одно из представлений и использовать его последовательно в вашей программе.

Указание -mfp16-format=ieee выбирает формат IEEE 754-2008. Этот формат может представлять нормализованные значения в диапазоне от 2^{-14} до 65504. Точность мантиссы составляет 11 бит, что приблизительно соответствует 3 десятичным цифрам.

Указание -mfp16-format=alternative выбирает альтернативный формат ARM. Это представление аналогично формату IEEE, но не поддерживает бесконечности или NaN. Вместо этого диапазон показателей расширен, поэтому этот формат может представлять нормализованные значения в диапазоне от 2^{-14} до 131008.

Тип __fp16 — это только формат хранения. Для целей арифметических и других операций значения __fp16 в выражениях C или C++ автоматически повышаются до float. Кроме того, вы не можете объявить функцию с возвращаемым значением или параметрами типа __fp16.

Обратите внимание, что преобразования из double в __fp16 включают промежуточное преобразование в float. Из-за округления это иногда может привести к другому результату, чем прямое преобразование.

ARM предоставляет аппаратную поддержку преобразований между __fp16 и float значениями как расширение VFP и NEON (Advanced SIMD). GCC генерирует код, использующий эти аппаратные инструкции, если вы компилируете с опциями для выбора FPU, которые их предоставляют; например, -mfpu=neon-fp16 -mfloat-abi=softfp, в дополнение к опции -mfp16-format для выбора формата половинной точности.

Поддержка типа данных __fp16 на уровне языка независима от того, генерирует ли GCC код с использованием аппаратных инструкций с плавающей запятой. В тех случаях, когда аппаратная поддержка не указана, GCC реализует преобразования между __fp16 и float значениями как вызовы библиотеки.

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

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Half-Precision.html

Spec-Zone.ru

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