¿Cuál es la diferencia entre los tipos de píxeles fijos de 32 bits y flotantes de 32 bits?

Estoy usando un programa de gráficos en tiempo real que ofrece los siguientes "formatos de píxeles".

formatos de píxeles

Entiendo muchos de ellos, pero una cosa que no entiendo es la diferencia entre floaty fixed.

¿Por qué alguien usaría uno sobre el otro? Ambos ocupan la misma cantidad de espacio, por lo que no veo cómo uno podría ofrecer más precisión.

No sé qué aplicación estás usando, pero si es derivada : Los formatos de punto fijo, independientemente de si son de 8 o 16 bits, solo pueden representar valores entre 0 y 1. Los formatos de punto flotante pueden representar valores muy grandes y valores muy pequeños. , tanto negativos como positivos. De la wiki derivada :)

Respuestas (2)

Básicamente, "flotante" significa que almacena una significando y un exponente base. Un flotante de 32 bits "estándar" utiliza 1 bit para el signo, 8 bits para el exponente y 23 bits para el signo y. La clave aquí es que la escala (el exponente) se almacena con el número.

"Fijo" se almacena en palabra alta/palabra baja "empaquetado". Un punto fijo de 32 bits probablemente será un entero de 16 bits antes de la raíz y un entero de 16 bits después (la parte decimal). Esto no concuerda con el comentario de @elegent sobre un rango entre 0 y 1: ese enlace puede ser específico de la implementación, no lo sé. Me parece que la implementación usa los 32 bits para la parte decimal y luego se basa en el contexto para la escala (el exponente) o que están aprovechando un modelo de color (probablemente) que usa el mismo rango.

Con respecto a la precisión: la cantidad de bits disponibles no equivale a una mejor precisión por sí sola, pero no estoy calificado para hablar sobre las distinciones más allá de los problemas obvios de desbordamiento/desbordamiento.

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

En el contexto de su menú en pantalla: están utilizando fijo como sinónimo de entero: 8 bits fijos (rgba), significa 8 bits por píxel, donde cada byte representa un valor entero entre 0 y 255.

Tampoco entiendo muy bien la explicación en la wiki: " cada píxel de los operadores de textura tendrá 8 bits de información para cada uno de sus canales R, G, B y A... una textura de 8 bits solo puede almacenar valores entre 0 y 1 para cada uno de sus canales R, G, B y A… ” No lo entiendo :)
@elegant: lo que cita es confuso, porque usan "8 bits" en dos contextos: la primera mención es "8 bits por píxel por canal (RGBA) = 32 bits, y luego cambian de contexto inmediatamente a 8 bits textura (2 bits por píxel por canal). Sin embargo, todavía estoy confundido, ya que 2 bits pueden ser {0,1,2,3) o si el bit alto es un signo, puede ser un rango {-1,0 ,1,2) Por otra parte, el enlace TOPs menciona una bandera TOPs, así que tal vez 4 bits para banderas, 4 bits para colores = 8 bits en total.
Sin embargo, quiero señalar que el milagro moderno de la informática se basa en el uso de una sola representación numérica (que en realidad es una abstracción de un interruptor de encendido y apagado) para hacer todo lo que hacen las computadoras. Así que el cambio de contexto y la naturaleza plástica de la representación es tanto una característica como un error.
Para tu información, @elegent, ese es en realidad el software que estoy usando (buen trabajo reconociéndolo desde nada más que una ventana desplegable).
@elegent: lo hizo bien en el cuerpo, mal en el comentario :)
@Yorik : Sí, tienes razón, bien dicho :) También mencionan que es un rango entre 0 y 1, que definitivamente necesita más de 2 bits... Por cierto, soy elegante ;)

Simplifiquemos las cosas pensando en una imagen monocromática.

Para representar nuestra imagen, la cortamos en una cuadrícula de píxeles y registramos un número que representa la intensidad de la luz en cada píxel. Para simplificar, supongamos que el valor representa linealmente la cantidad de luz (la realidad es un poco más complicada que eso, pero está lo suficientemente cerca por ahora).

Sin embargo, todavía tenemos que representar ese número como un patrón de bits. Hay un número infinito de valores de intensidad de luz posibles, pero solo un número finito de patrones de bits posibles de un tamaño dado. Está claro que debemos hacer un compromiso.

Básicamente, existen dos estrategias para representar números en computadoras, punto fijo y punto flotante (los números enteros pueden considerarse un caso especial de punto fijo). También está la cuestión de los versos firmados sin firmar.

En un número de punto fijo fijamos el factor de escala de antemano. Entonces, por ejemplo, para representar números en el rango de 0 a 1 inclusive, podríamos usar un número sin signo de 32 bits con un factor de escala de 1/(2 32 -1).

En un número de coma flotante, permitimos elegir un rango de factores de escala. Hacemos esto dividiendo nuestros bits. Algunos bits se usan para almacenar un número binario y otros bits se usan para almacenar la potencia de 2 para escalar ese número binario (hay un poco de truco adicional en la práctica, lea IEEE 754 si realmente quiere los detalles sangrientos). Con los números de coma flotante podemos almacenar una gama muy amplia de números, pero la precisión varía según el valor del número.

Cuando se trata de una cámara, una pantalla o una impresora, nuestro hardware determina los valores más oscuros y más claros posibles y, por lo general, divide los valores posibles en el medio de manera aproximadamente igual. Los valores negativos realmente no tienen ningún sentido físico ya que no existe la luz negativa.

Por otro lado cuando nos adentramos en el mundo del modelado 3D puede ser útil para representar un rango mucho más amplio de valores de brillo. Puede haber una gran diferencia en el brillo entre las partes más brillantes y las más oscuras del mundo y aunque la luz negativa no existe físicamente, eso no significa que no pueda tenerla en un modelo 3D. Entonces, los formatos que usan números de punto flotante con signo pueden comenzar a tener sentido.

Por supuesto que hay un precio a pagar. El número de punto flotante con signo de 32 bits puede representar valores mucho más grandes y mucho más pequeños que el número de punto fijo sin signo de 32 bits, pero en algunos casos tendrá una precisión menor.