Ich verwende ein Echtzeit-Grafikprogramm, das die folgenden "Pixelformate" anbietet.
Ich verstehe viele von ihnen, aber eine Sache, die ich nicht verstehe, ist der Unterschied zwischen float
und 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.
„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.
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.
elegant