2010-04-10 6 views
13

digamos, para flotador escriba en c, de acuerdo con la especificación de punto flotante IEEE, hay 8 bits utilizados para la fracción presentada, y se calcula como primero tomó estos 8 bits y lo tradujo a número sin signo, y luego menos BIASE, que es 2^7 - 1 = 127, y el resultado es un exponente que va de -127 a 128, inclusive. Pero ¿por qué no podemos tratar estos patrones de 8 bits como un número firmado, ya que el rango resultante es [-128,127], que es casi el mismo que el anterior.¿por qué el número de punto flotante IEEE calcula el exponente utilizando una forma sesgada?

+0

Una gran pregunta. También por qué está el signo estúpido, en lugar de tratar a la mantisa como complemento a dos, como lo hacen las personas normales. –

+1

@Pavel Radzivilovsky: No se puede tratar la mantisa como complemento a dos, porque está normalizada con un alto implícito alto. ¿Cuál sería el beneficio del complemento de dos en este caso de todos modos? –

Respuesta

16

El propósito del sesgo es que el exponente se almacene en el formulario sin signo, lo que hace que sea más fácil hacer comparaciones. De Wikipedia:

Mediante la disposición de los campos para el bit de signo está en la posición del bit más significativo , el exponente sesgado en el medio, entonces la mantisa en los mínimos bits significativos, el valor resultante voluntad ordenado correctamente, si es interpretado como un valor entero en coma flotante o . Esto permite comparaciones de alta velocidad de de los números de punto flotante utilizando hardware de punto fijo.

Así que, básicamente, un número de punto flotante es:

[sign] [unsigned exponent (aka exponent + bias)] [mantissa] 

This website proporciona una excelente información acerca de por qué esto es bueno - en concreto, comparar las implementaciones de funciones de comparación de punto flotante.

Además, ninguna respuesta completa acerca de las rarezas de coma flotante puede pasar sin mencionar "What Every Computer Scientist Should Know About Floating-Point Arithmetic". Es largo, denso y un poco pesado en las matemáticas, pero es muy denso oro matemático (o algo así).

+0

Suena como una excusa de un ingeniero electrónico pobre para mí ... –

+2

@Pavel, todavía hay procesadores sin FPU, es decir. Brazos. Hacer al menos esta operación fácil de hacer en enteros hace que emular FPU sea más rápido. – liori

+1

@liori los procesadores ARM recientes tienen FPU [1], pero, @Pavel, cuando la especificación de punto flotante IEEE-754 se acordó por primera vez en 1985, la mayoría de los procesadores * no *. Por ejemplo, el 8086 - ¡el x86 original! - solo tenía una FPU a través de un procesador de extensión opcional, el 8087 "x87". La FPU no se incluyó hasta el 80486, que se introdujo en 1989. [2] [1] http://www.arm.com/products/processors/technologies/vector-floating-point.php [2 ] http://en.wikipedia.org/wiki/Floating-point_unit#Add-on_FPUs –

Cuestiones relacionadas