Введение
В вычислительной технике мини-плавающие значения представляют собой значения плавающей запятой, представленные очень немногими битами. Как и следовало ожидать, они не очень подходят для нумерационных вычислений общего назначения. Они используются для специальных целей, чаще всего в компьютерной графике, где итерации небольшие, а точность имеет эстетический эффект. Машинное обучение также использует аналогичные форматы, такие как bfloat16. Кроме того, они часто встречаются в качестве педагогического инструмента в курсах информатики для демонстрации свойств и структур арифметики с плавающей запятой и чисел IEEE 754. Мини-плавающие с 16 битами являются полуточными номерами (в отличие от одно- и двойной точности). Есть также мини-плавающие устройства с 8 битами или даже меньше. Мини-плавательные устройства могут быть спроектированы в соответствии с принципами стандарта IEEE 754. В этом случае они должны подчиняться (не явно написанным) правилам границы между субнормальными и нормальными числами и должны иметь специальные шаблоны для бесконечности и NaN. Нормализованные числа хранятся с предвзятым показателем. Новая редакция стандарта, IEEE 754 2008, имеет 16-битные бинарные мини-плавающие устройства.
In computing, minifloats are floating point values represented with very few bits. Predictably, they are not well suited for general purpose numerical calculations. They are used for special purposes, most often in computer graphics, where iterations are small and precision has aesthetic effects. Machine learning also uses similar formats like bfloat16. Additionally, they are frequently encountered as a pedagogical tool in computer science courses to demonstrate the properties and structures of floating point arithmetic and IEEE 754 numbers. Minifloats with 16 bits are half precision numbers (opposed to single and double precision). There are also minifloats with 8 bits or even fewer. Minifloats can be designed following the principles of the IEEE 754 standard. In this case they must obey the (not explicitly written) rules for the frontier between subnormal and normal numbers and must have special patterns for infinity and NaN. Normalized numbers are stored with a biased exponent. The new revision of the standard, IEEE 754 2008, has 16 bit binary minifloats.
Пример 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. В битовых паттернах есть пространства для визуализации их частей.
A minifloat in 1 byte (8 bit) with 1 sign bit, 4 exponent bits and 3 significand bits (in short, a 1.4.3 minifloat) is demonstrated here. The exponent bias is defined as 7 to center the values around 1 to match other IEEE 754 floats so (for most values) the actual multiplier for exponent x is All IEEE 754 principles should be valid. Numbers in a different base are marked as , for example, 101 = 5. The bit patterns have spaces to visualize their parts.
Недостаточное количество
Значение расширяется на "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 (наибольшее число, не соответствующее нормальному)
0 0000 001 = 0.0012 × 21 7 = 0.125 × 2 6 = 0.001953125 (least subnormal number)
0 0000 111 = 0.1112 × 21 7 = 0.875 × 2 6 = 0.013671875 (greatest subnormal number)
Нормальные числа
Значение дополняется "1.
0 0001 000 = 1.0002 × 21 7 = 1 × 2 6 = 0.015625 (least normalized number)
0 0001 001 = 1.0012 × 21 7 = 1.125 × 2 6 = 0.017578125
0 0111 000 = 1.0002 × 27 7 = 1 × 20 = 1
0 0111 001 = 1.0012 × 27 7 = 1.125 × 20 = 1.125 (least value above 1)
0 1110 000 = 1.0002 × 214 7 = 1.000 × 27 = 128
0 1110 001 = 1.0012 × 214 7 = 1.125 × 27 = 144
0 1110 110 = 1.1102 × 214 7 = 1.750 × 27 = 224
0 1110 111 = 1.1112 × 214 7 = 1.875 × 27 = 240 (greatest normalized number)
Таблица значений
Это диаграмма всех возможных значений для этого примера 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.
There are only 242 different non NaN values (if +0 and −0 are regarded as different), because 14 of the bit patterns represent NaNs. Tables like the above can be generated for any combination of SEMB values using a script in Python or in GDScript.
Альтернативные значения смещения
При таких малых размерах могут быть интересны другие значения смещения, например, смещение 2 сделает, что числа 0 16 будут иметь такое же битное представление, как целые числа 0 16, с потерей того, что никакие нецелые значения не могут быть представлены.
0 0000 001 = 0.0012 × 21 ( 2) = 0.125 × 23 = 1 (subnormal number)
0 0000 111 = 0.1112 × 21 ( 2) = 0.875 × 23 = 7 (subnormal number)
0 0001 000 = 1.0002 × 21 ( 2) = 1.000 × 23 = 8 (normalized number)
0 0001 111 = 1.1112 × 21 ( 2) = 1.875 × 23 = 15 (normalized number)
0 0010 000 = 1.0002 × 22 ( 2) = 1.000 × 24 = 16 (normalized number)
Добавление
На графике показано добавление еще меньших (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-плавающих значений, где показатель - это все единицы, а значение - все нули.
В встроенных устройствах
Мини-плавающие элементы также часто используются в встроенных устройствах, особенно на микроконтроллерах, где плавающая точка должна быть эмулирована в программном обеспечении. Для ускорения вычислений мантисса обычно занимает ровно половину битов, поэтому граница регистра автоматически обращается к частям без сдвига.