Was ist der Unterschied zwischen 32-Bit-Float- und 32-Bit-Festpixeltypen?

Ich verwende ein Echtzeit-Grafikprogramm, das die folgenden "Pixelformate" anbietet.

Pixelformate

Ich verstehe viele von ihnen, aber eine Sache, die ich nicht verstehe, ist der Unterschied zwischen floatund fixed.

Warum sollte jemand einen über dem anderen verwenden? Sie nehmen beide gleich viel Platz ein, daher sehe ich nicht, wie man mehr Präzision bieten könnte.

Ich weiß nicht, welche Anwendung Sie verwenden, aber wenn es sich um eine Ableitung handelt : Festkommaformate, unabhängig davon, ob es sich um 8- oder 16-Bit handelt, können nur Werte zwischen 0 und 1 darstellen. Gleitkommaformate können sehr große und sehr kleine Werte darstellen , sowohl negativ als auch positiv. Aus dem abgeleiteten Wiki :)

Antworten (2)

„Float“ bedeutet also im Grunde, dass es einen Signifikanten und einen Basisexponenten speichert. Ein "Standard" 32-Bit-Float verwendet 1 Bit für das Vorzeichen, 8 Bit für den Exponenten und 23 Bit für Signifcand. Der Schlüssel hier ist, dass die Skala (der Exponent) mit der Zahl gespeichert wird.

"Fixed" wird als Hi-Word/Low-Word "gepackt" gespeichert. Ein 32-Bit-Festkomma ist wahrscheinlich eine 16-Bit-Ganzzahl vor der Basis und eine 16-Bit-Ganzzahl danach (der Dezimalteil). Dies stimmt nicht mit dem Kommentar von @elegent über einen Bereich zwischen 0 und 1 überein: Dieser Link ist möglicherweise implementierungsspezifisch, ich weiß es nicht. Es klingt für mich so, als ob die Implementierung alle 32 Bits für den Dezimalteil verwendet und sich dann auf den Kontext für die Skalierung (den Exponenten) verlässt oder dass sie (wahrscheinlich) ein Farbmodell nutzen, das denselben Bereich verwendet.

In Bezug auf die Genauigkeit: Die Anzahl der verfügbaren Bits ist nicht gleichbedeutend mit einer besseren Genauigkeit, aber ich bin völlig unqualifiziert, um über die Unterschiede jenseits der offensichtlichen Überlauf- / Unterlaufprobleme zu sprechen.

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

https://stackoverflow.com/questions/7524838/fixed-point-vs-floating-point-number

Im Zusammenhang mit Ihrem Bildschirmmenü: Sie verwenden fest als Synonym für Ganzzahl: 8-Bit fest (rgba) bedeutet 8 Bit pro Pixel, wobei jedes Byte einen ganzzahligen Wert zwischen 0 und 255 darstellt.

Ich verstehe auch die Erklärung im Wiki nicht wirklich: " Jedes Pixel der Texturoperatoren hat 8-Bit-Informationen für jeden seiner R-, G-, B- und A-Kanäle ... eine 8-Bit-Textur kann nur Werte zwischen speichern 0 und 1 für jeden seiner R-, G-, B- und A-Kanäle … "Ich verstehe es nicht :)
@elegant: Was Sie zitieren , ist verwirrend, weil sie "8-Bit" in zwei Kontexten verwenden: Die erste Erwähnung ist "8 Bit pro Pixel pro Kanal (RGBA) = 32 Bit, und dann wechseln sie den Kontext sofort zu 8-Bit Textur (2 Bits pro Pixel pro Kanal). Ich bin jedoch immer noch verwirrt, da 2 Bits {0,1,2,3 sein können) oder wenn das High-Bit ein Vorzeichen ist, kann es ein Bereich {-1,0 sein ,1,2) Andererseits erwähnt der TOPs-Link ein TOPs-Flag, also vielleicht 4 Bits für Flags, 4 Bits für Farben = 8 Bits insgesamt.
Ich möchte jedoch betonen, dass das moderne Computerwunder auf der Verwendung einer einzigen numerischen Darstellung (die eigentlich eine Abstraktion eines Ein-Aus-Schalters ist) beruht, um alles zu tun, was Computer tun. Der Kontextwechsel und die plastische Natur der Darstellung sind also ebenso ein Merkmal wie ein Fehler.
fyi @elegent, das ist eigentlich die Software, die ich verwende (gute Arbeit, sie nur an einem Pulldown-Fenster zu erkennen).
@elegent: richtig im Körper, falsch im Kommentar :)
@Yorik : Ja, du hast Recht, gut gesagt :) Sie erwähnen auch, dass es ein Bereich zwischen 0 und 1 ist, der definitiv mehr als 2 Bits benötigt … Übrigens bin ich elegant ;)

Halten wir die Dinge einfach, indem wir an ein monochromes Bild denken.

Um unser Bild darzustellen, schneiden wir es in ein Raster von Pixeln und zeichnen eine Zahl auf, die die Lichtintensität an jedem Pixel darstellt. Nehmen wir der Einfachheit halber an, dass der Wert die Lichtmenge linear darstellt (die Realität ist etwas komplizierter, aber fürs Erste ist es nah genug).

Wir müssen diese Zahl jedoch immer noch als Bitmuster darstellen. Es gibt eine unendliche Anzahl möglicher Lichtintensitätswerte, aber nur eine endliche Anzahl möglicher Bitmuster einer gegebenen Größe. Natürlich müssen wir einen Kompromiss eingehen.

Grundsätzlich gibt es zwei Strategien zur Darstellung von Zahlen auf Computern, Festkomma und Fließkomma (Ganzzahlen können als Sonderfall von Festkomma betrachtet werden). Es gibt auch die Frage nach signierten Versen ohne Signatur.

Bei einer Festkommazahl legen wir den Skalierungsfaktor im Voraus fest. Um beispielsweise Zahlen im Bereich von 0 bis einschließlich 1 darzustellen, könnten wir eine 32-Bit-Zahl ohne Vorzeichen mit einem Skalierungsfaktor von 1/(2 32 -1) verwenden.

In einer Fließkommazahl erlauben wir die Auswahl einer Reihe von Skalierungsfaktoren. Wir tun dies, indem wir unsere Bits aufteilen. Einige Bits werden verwendet, um eine Binärzahl zu speichern, und andere Bits werden verwendet, um zu speichern, um welche Potenz von 2 diese Binärzahl skaliert werden soll (in der Praxis gibt es ein bisschen zusätzliche Trickserei, lesen Sie IEEE 754, wenn Sie wirklich die blutigen Details wollen). Mit Fließkommazahlen können wir eine sehr breite Palette von Zahlen speichern, aber die Genauigkeit variiert je nach Wert der Zahl.

Wenn es um eine Kamera, einen Bildschirm oder einen Drucker geht, bestimmt unsere Hardware die dunkelstmöglichen und hellstmöglichen Werte und bricht die möglichen Werte dazwischen normalerweise ungefähr gleich auf. Negative Werte machen physikalisch keinen Sinn, da es kein negatives Licht gibt.

Wenn wir andererseits in die Welt der 3D-Modellierung einsteigen, kann es nützlich sein, einen viel größeren Bereich von Helligkeitswerten darzustellen. Es kann einen großen Helligkeitsunterschied zwischen den hellsten und dunkelsten Teilen der Welt geben, und obwohl negatives Licht physisch nicht existiert, bedeutet das nicht, dass Sie es nicht in einem 3D-Modell haben können. Daher können Formate mit vorzeichenbehafteten Gleitkommazahlen sinnvoll werden.

Natürlich gibt es einen Preis zu zahlen. Die vorzeichenbehaftete 32-Bit-Gleitkommazahl kann viel größere und viel kleinere Werte als die vorzeichenlose 32-Bit-Festkommazahl darstellen, hat aber in einigen Fällen eine geringere Genauigkeit.