Введение

В вычислительной технике мини-плавающие значения представляют собой значения плавающей запятой, представленные очень немногими битами. Как и следовало ожидать, они не очень подходят для нумерационных вычислений общего назначения. Они используются для специальных целей, чаще всего в компьютерной графике, где итерации небольшие, а точность имеет эстетический эффект. Машинное обучение также использует аналогичные форматы, такие как bfloat16. Кроме того, они часто встречаются в качестве педагогического инструмента в курсах информатики для демонстрации свойств и структур арифметики с плавающей запятой и чисел IEEE 754. Мини-плавающие с 16 битами являются полуточными номерами (в отличие от одно- и двойной точности). Есть также мини-плавающие устройства с 8 битами или даже меньше. Мини-плавательные устройства могут быть спроектированы в соответствии с принципами стандарта IEEE 754. В этом случае они должны подчиняться (не явно написанным) правилам границы между субнормальными и нормальными числами и должны иметь специальные шаблоны для бесконечности и NaN. Нормализованные числа хранятся с предвзятым показателем. Новая редакция стандарта, IEEE 754 2008, имеет 16-битные бинарные мини-плавающие устройства.

Пример 8-битной плавающей системы

+Layout of an example 8 bit minifloat (1.4.3) sign exponent significand 0 0 0 0 0 0 0 0 Здесь показана мини-плавающая система в 1 байте (8 бит) с 1 битом знака, 4 битами знака и 3 битами знака (вкратце, мини-плавающая система 1.4.3). Склонение экспоненты определяется как 7, чтобы центровать значения вокруг 1, чтобы соответствовать другим IEEE 754 floats, поэтому (для большинства значений) фактический множитель для экспонента x является Все принципы IEEE 754 должны быть действительными. Числа в другой базе обозначаются как , например, 101 = 5. В битовых паттернах есть пространства для визуализации их частей.

Недостаточное количество

Значение расширяется на "0". и значение показателя рассматривается как 1 выше, как наименьшее нормализованное число: 0 0000 001 = 0,0012 × 21 7 = 0,125 × 2 6 = 0,001953125 (наименьшее число, не соответствующее нормальному) 0 0000 111 = 0,1112 × 21 7 = 0,875 × 2 6 = 0,013671875 (наибольшее число, не соответствующее нормальному)

Нормальные числа

Значение дополняется "1.

Таблица значений

Это диаграмма всех возможных значений для этого примера 8 битного плавающего. 1000 001 010 011 100 111 0 0000 0 0.001953125 0.00390625 0.005859375 0.0078125 0.009765625 0.01171875 0.013671875 1 1 1 0001 0.015625 0.015625 0.015625 0.015675 0.015675 0.015675 0.015675 0.015675 0.0156 0.0156 0.0156 0.0156 0.0156 0.0156 0.0156 0.0156 0.0156 0.0156 0.0156 0.0158 0.0158 0.0158 0.0758 0.0756 0.0756 0.0756 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.0758 0.00 0.0758 0.000 0.0758 0.0 0.0758 0.0 0.0758 0.0 0.00 0.000000 0.0758 0.0 0.000 0.0000000 0.00000000 0.00000000000 0.0000000000000 0.0000000000000000 0.00000000000000000000 0.000000000000000000000 0.00000000000000000 0.0000000000000000000 0.000000000000000000000 0.0000000000000000000000000000 0.00000000000000000000000000000000 0.000000000000000000000000000000000 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Такие таблицы, как приведенные выше, могут быть сгенерированы для любой комбинации значений SEMB с использованием скрипта в Python или в GDScript.

Альтернативные значения смещения

При таких малых размерах могут быть интересны другие значения смещения, например, смещение 2 сделает, что числа 0 16 будут иметь такое же битное представление, как целые числа 0 16, с потерей того, что никакие нецелые значения не могут быть представлены.

Добавление

На графике показано добавление еще меньших (1.3.2.3) мини-плавающих элементов с 6 битами. Эта система с плавающей запятой точно соответствует правилам IEEE 754. NaN как операнд всегда дает NaN результаты. Inf − Inf и (−Inf) + Inf также дают NaN (зеленая зона). Inf может быть увеличена и уменьшена на конечные значения без изменения. Суммы с конечными операндами могут дать бесконечный результат (т.е. 14.0 + 3.0 = +Inf в результате является синие области, -Inf является красные области). Диапазон конечных операндов заполняется кривыми x + y = c, где c всегда является одним из представляемых значений плавающего элемента (синий и красный для положительных и отрицательных результатов соответственно).

Другие размеры

В Radeon R300 и R420 используется формат плавающей запятой "fp24" с 7 битами экспоненты и 16 битами (+1 имплицит) мантисы. "Full Precision" в Direct3D 9.0 - это собственный 24-битный формат плавающей запятой. Графический API D3D9 (Shader Model 2.0) от Microsoft первоначально поддерживал как FP24 (как в чипе R300 от ATI), так и FP32 (как в чипе NV30 от Nvidia) как "Full Precision", а также FP16 как "Partial Precision" для вертикальных и пиксельных шейдерных вычислений, выполняемых графическим оборудованием. Khronos определяет 10-битные и 11-битные форматы плавающих для использования с Vulkan. Оба формата не имеют бита знака и 5 бит экспонента. 10-битный формат имеет 5-битную мантису, а 11-битный формат имеет 6-битную мантису. Рабочая группа IEEE SA P3109 в настоящее время работает над стандартом для 8-битных мини-плавающих устройств, оптимизированных для машинного обучения. В текущем проекте определяется не один формат, а семейство из 7 различных форматов, названных "binary8pP", где "P" - число от 1 до 7. Эти плавающие устройства разработаны, чтобы быть компактными и эффективными, но не следуют той же семантике, что и другие плавающие устройства IEEE, и им не хватает таких функций, как отрицательное нулевое и множественные значения NaN. Бесконечность определяется как показатель и значение, имеющие все единицы, вместо других IEEE-плавающих значений, где показатель - это все единицы, а значение - все нули.

В встроенных устройствах

Мини-плавающие элементы также часто используются в встроенных устройствах, особенно на микроконтроллерах, где плавающая точка должна быть эмулирована в программном обеспечении. Для ускорения вычислений мантисса обычно занимает ровно половину битов, поэтому граница регистра автоматически обращается к частям без сдвига.