В чем разница между 32-битным плавающим и 32-битным фиксированным типом пикселей?

Я использую графическую программу в реальном времени, которая предлагает следующие «форматы пикселей».

пиксельные форматы

Я понимаю многие из них, но одну вещь я не понимаю, это разницу между floatи fixed.

Зачем кому-то использовать одно вместо другого? Они оба занимают одинаковое количество места, поэтому я не вижу, как можно было бы обеспечить большую точность.

Я не знаю, какое приложение вы используете, но если оно производное : форматы с фиксированной запятой, независимо от того, являются ли они 8-битными или 16-битными, могут представлять только значения от 0 до 1. Форматы с плавающей запятой могут представлять очень большие значения и очень маленькие значения , как отрицательное, так и положительное. Из производной вики :)

Ответы (2)

Итак, в основном, «плавающий» означает, что он хранит мантиссу и базовую экспоненту. «Стандартное» 32-битное число с плавающей запятой использует 1 бит для знака, 8 бит для экспоненты и 23 бита для мантиссы. Ключевым моментом здесь является то, что шкала (показатель степени) сохраняется вместе с числом.

«Фиксированный» хранится в «упакованном» старшем/младшем слове. 32-битная фиксированная точка, вероятно , будет 16-битным целым числом до системы счисления и 16-битным целым числом после (десятичная часть). Это не согласуется с комментарием @elegent о диапазоне от 0 до 1: эта ссылка может быть специфичной для реализации, я не знаю. Мне кажется, что эта реализация использует все 32 бита для десятичной части, а затем полагается на контекст для масштаба (экспонента) или что они используют цветовую модель (вероятно), которая использует тот же диапазон.

Что касается точности: количество доступных битов само по себе не означает более высокую точность, но я совершенно не имею права говорить о различиях, помимо очевидных проблем с переполнением/недополнением.

https://stackoverflow.com/questions/8638792/how-to-convert-packed-integer-16-16-fixed-point-to-float

https://stackoverflow.com/questions/7524838/число с фиксированной точкой против числа с плавающей запятой

В контексте вашего экранного меню: они используют фиксированный как синоним целого числа: 8-битный фиксированный (rgba) означает 8 бит на пиксель, где каждый байт представляет целочисленное значение от 0 до 255.

Я также не очень понимаю объяснение в вики: « каждый пиксель операторов текстуры будет иметь 8-битную информацию для каждого из его каналов R, G, B и A… 8-битная текстура может хранить значения только между 0 и 1 для каждого из его каналов R, G, B и A… » Я не понимаю :)
@elegant: то, что вы цитируете , сбивает с толку, потому что они используют «8-бит» в двух контекстах: первое упоминание: «8 бит на пиксель на канал (RGBA) = 32 бита, а затем они сразу же переключают контекст на 8-бит. текстура (2 бита на пиксель на канал).Однако я все еще в замешательстве, так как 2 бита могут быть {0,1,2,3) или если старший бит является знаком, это может быть диапазон {-1,0 ,1,2). Опять же, в ссылке TOPs упоминается флаг TOPs, поэтому, возможно, 4 бита для флагов, 4 бита для цветов = всего 8 бит.
Однако я хочу отметить, что современное чудо вычислительной техники основано на использовании единственного числового представления (которое на самом деле является абстракцией выключателя) для выполнения всего, что делают компьютеры. Таким образом, переключение контекста и пластичность репрезентации — это не только ошибка, но и особенность.
к вашему сведению @elegent, это на самом деле программное обеспечение, которое я использую (хорошая работа, распознать его только из раскрывающегося окна).
@elegent: правильно понял в теле, ошибся в комментарии :)
@Yorik : Да, вы правы, хорошо сказано :) Они также упоминают, что это диапазон от 0 до 1, для которого определенно требуется более 2 бит… Кстати, я элегантен ;)

Давайте не будем усложнять, подумав о монохромном изображении.

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

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

В основном есть две стратегии представления чисел на компьютерах: с фиксированной запятой и с плавающей запятой (целые числа можно считать частным случаем фиксированной запятой). Существует также вопрос подписанных стихов без подписи.

В числе с фиксированной точкой мы заранее фиксируем масштабный коэффициент. Так, например, для представления чисел в диапазоне от 0 до 1 включительно мы можем использовать 32-битное число без знака с масштабным коэффициентом 1/(2 32 -1).

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

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

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

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