Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В вычислениях , minifloats являются плавающей точкой значение представлено с очень немногими битами . Как и ожидалось, они плохо подходят для численных расчетов общего назначения. Они используются для специальных целей, чаще всего в компьютерной графике, где итерации небольшие, а точность имеет эстетические эффекты. [ необходима цитата ] Машинное обучение также использует аналогичные форматы, такие как bfloat16 . Кроме того, они часто используются в качестве педагогического инструмента на курсах информатики для демонстрации свойств и структуры арифметики с плавающей запятой и чисел IEEE 754 .

Минифлоты с 16 битами являются числами половинной точности (в отличие от одинарной и двойной точности ). Также есть минифлоты с 8 битами или даже меньше.

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

Radeon R300 и R420 , графические процессоры использовали «FP24» формат с плавающей точкой с 7 битами экспоненты и 16 бит (+1 неявных) от мантиссы. [1] «Полная точность» в Direct3D 9.0 - это собственный 24-битный формат с плавающей запятой. Графический API Microsoft D3D9 (Shader Model 2.0) изначально поддерживал как FP24 (как в чипе ATI R300), так и FP32 (как в чипе NV30 от Nvidia) как «Полная точность», а также FP16 как «Частичная точность» для вычислений вершинных и пиксельных шейдеров. выполняется графическим оборудованием.

Обозначение [ править ]

Минифлот обычно описывается набором из четырех чисел ( S , E , M , B ):

  • S - длина поля знака. Обычно это либо 0, либо 1.
  • E - длина поля экспоненты.
  • M - длина поля мантиссы (мантиссы).
  • B - смещение экспоненты .

Формат минифлота, обозначенный ( S , E , M , B ), поэтому имеет длину S + E + M бит.

В компьютерной графике минифлоты иногда используются для представления только целых значений. Если в то же время должны существовать субнормальные значения, наименьшее субнормальное число должно быть 1. В этом случае значение смещения будет B = E - M - 1 , при условии, что для каждого IEEE используются два специальных значения показателя степени.

Обозначение ( S , E , M , B ) может быть преобразовано в формат ( B , P , L , U ) как (2, M + 1, B + 1, 2 S - B ) (с использованием IEEE показателей степени) .

Пример [ править ]

В этом примере для представления целочисленных значений используется минифлот в 1 байт (8 бит) с 1 битом знака, 4 битами экспоненты и 3 битами значащей (короче, минифлот 1.4.3.-2). Все принципы IEEE 754 должны действовать. Единственное свободное значение - это смещение экспоненты , которое мы определяем как -2 для целых чисел. Неизвестный показатель называется моментом x .

Числа с другим основанием помечаются как ... основание , например, 101 2 = 5. В битовых шаблонах есть пробелы для визуализации их частей.

Представление нуля [ править ]

0 0000 000 = 0

Субнормальные числа [ править ]

Мантисса расширяется на «0»:

0 0000 001 = 0,001 2 × 2 x = 0,125 × 2 x = 1 (наименьшее субнормальное число)...0 0000111 = 0,111 2 × 2 x = 0,875 × 2 x = 7 (наибольшее субнормальное число)

Нормализованные числа [ править ]

Значение увеличивается на «1»:

0 0001 000 = 1.000 2 × 2 x = 1 × 2 x = 8 (наименьшее нормализованное число)0 0001001 = 1,001 2 × 2 x = 1,125 × 2 x = 9...0 0010 000 = 1.000 2 × 2 x +1 = 1 × 2 x +1 = 160 00100001 = 1,001 2 × 2 x +1 = 1,125 × 2 x +1 = 18...0 1110 000 = 1.000 2 × 2 x +13 = 1.000 × 2 x +13 = 655360 11100001 = 1,001 2 × 2 x +13 = 1,125 × 2 x +13 = 73728...0 1110110 = 1,110 2 × 2 x +13 = 1,750 × 2 x +13 = 1146880 1110111 = 1,111 2 × 2 x +13 = 1,875 × 2 x +13 = 122880 (наибольшее нормализованное число)

Бесконечность [ править ]

0 1111 000 = + бесконечность1 1111 000 = - бесконечность

Если бы поле экспоненты не обрабатывалось специально, значение было бы

0 1111 000 = 1.000 2 × 2 x +14 = 2 17 = 131072

Не число [ править ]

x 1111 yyy = NaN (если yyy ≠ 000)

Без специальной обработки IEEE 754 наибольшего показателя степени наибольшее возможное значение было бы

0 1111111 = 1,111 2 × 2 x +14 = 1,875 × 2 17 = 245760

Значение смещения [ править ]

Если наименьшее субнормальное значение (вторая строка выше) должно быть 1 [ требуется ссылка ] , значение x должно быть x = 3. Следовательно, смещение должно быть -2 [ требуется ссылка ] ; то есть каждый сохраненный показатель должен быть уменьшен на -2 или должен быть увеличен на 2, чтобы получить числовой показатель степени.

Все значения как десятичные [ править ]

Это диаграмма всех возможных значений при обращении с поплавком так же, как с поплавком IEEE.

Все значения как целые числа [ править ]

Из-за серьезной нехватки точности с 8-битными числами с плавающей запятой рекомендуется использовать их только с масштабированием до целых значений.

Однако на практике поплавки точно не отображаются. [ необходима цитата ] Вместо этого они округлены; например, если у числа с плавающей запятой было около 3 значащих цифр и было представлено число 8192, оно было бы округлено до 8190, чтобы избежать ложной точности , в противном случае число, подобное 1000000, преобразованное в такое число с плавающей запятой и обратно, будет неправильно показано как, например, , 1000448. [ необходима ссылка ]

Свойства этого примера [ править ]

Графическое представление интегральных (1.4.3. − 2) минифлотов

Целые минифлоты в 1 байте имеют больший диапазон ± 122880, чем целые числа с дополнением до двух с диапазоном от -128 до +127. Большой диапазон компенсируется плохой точностью, потому что имеется только 4 бита мантиссы, что эквивалентно чуть более чем одному десятичному знаку. У них также больший диапазон, чем у минифлота половинной точности с диапазоном ± 65 504, что также компенсируется отсутствием дроби и низкой точностью.

Есть только 242 различных значения (если +0 и -0 считаются разными), потому что 14 битовых комбинаций представляют NaN.

Значения от 0 до 16 имеют тот же битовый шаблон, что и minifloat или целое число с дополнением до двух. Первый шаблон с другим значением - 00010001, что составляет 18 как минифлот и 17 как целое число с дополнением до двух.

Это совпадение вообще не происходит с отрицательными значениями, потому что этот минифлот является форматом величины со знаком.

Вертикальная реальная линия справа ясно показывает изменяющуюся плотность значений с плавающей запятой - свойство, общее для любой системы с плавающей запятой. Эта изменяющаяся плотность приводит к кривой, подобной экспоненциальной функции.

Хотя кривая может казаться плавной, это не так. График фактически состоит из различных точек, и эти точки лежат на отрезках с дискретными наклонами. Значение битов экспоненты определяет абсолютную точность битов мантиссы, и именно эта точность определяет наклон каждого линейного сегмента.

Арифметика [ править ]

Дополнение [ править ]

Добавление (1.3.2.3) -минифлотов

На графике показано добавление еще меньших (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 всегда является одним из представимых значений с плавающей запятой (синий и красный для положительных и отрицательных результатов соответственно).

Вычитание, умножение и деление [ править ]

Остальные арифметические операции можно проиллюстрировать аналогично:

  • Вычитание

  • Умножение

  • Разделение

Во встроенных устройствах [ править ]

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

См. Также [ править ]

  • Арифметика с фиксированной точкой
  • Двоичное масштабирование
  • Формат с плавающей запятой половинной точности
  • bfloat16 формат с плавающей запятой
  • G.711 A-закон

Ссылки [ править ]

  1. Бак, Ян (13 марта 2005 г.), «Глава 32. Погружение в вычисления на GPU» , в Pharr, Matt (ed.), GPU Gems , ISBN 0-321-33559-7, дата обращения 5 апреля 2018.
  • Мунафо, Роберт (15 мая 2016 г.). «Обзор форматов с плавающей запятой» . Дата обращения 8 августа 2016 .

Дальнейшее чтение [ править ]

  • Хронос Вулкан беззнаковый 11-битный формат с плавающей запятой
  • Хронос Вулкан беззнаковый 10-битный формат с плавающей запятой

Внешние ссылки [ править ]

  • OpenGL половинный плавающий пиксель