domingo, 5 de junio de 2011

Números de punto flotante en 32 y 64 bits.

El estándar de la IEEE para aritmética en coma flotante (IEEE 754) es el estándar más extendido para las computaciones en coma flotante, y es seguido por muchas de las mejoras de CPU y FPU. El estándar define formatos para la representación de números en coma flotante (incluyendo el cero) y valores desnormalizados, así como valores especiales como infinito y NaN, con un conjunto de operaciones en coma flotante que trabaja sobre estos valores. También especifica cuatro modos de redondeo y cinco excepciones (incluyendo cuándo ocurren dichas excepciones y qué sucede en esos momentos).

IEEE 754 especifica cuatro formatos para la representación de valores en coma flotante: precisión simple (32 bits), precisión doble (64 bits), precisión simple extendida (≥ 43 bits, no usada normalmente) y precisión doble extendida (≥ 79 bits, usualmente implementada con 80 bits). Sólo los valores de 32 bits son requeridos por el estándar, los otros son opcionales. Muchos lenguajes especifican qué formatos y aritmética de la IEEE implementan, a pesar de que a veces son opcionales.


Precisión simple 32-bits

Un número en coma flotante de precisión simple se almacena en una palabra de 32 bits. 1 8 23 <-- tamaño en bits
+-+--------+-----------------------+
|S| Exp | Significante |
+-+--------+-----------------------+
31 30 23 22 0 <-- índice del bit (0 a la derecha)
desplazado +127


donde S es el bit de signo y Exp es el campo exponente. (Para el signo: 0=Positivo ; 1= Negativo).

El exponente es desplazado en el un número en precisión simple, un exponente en el rango −126 a +127 es desplazado mediante la suma de 127 para obtener un valor en el rango 1 a 254 (0 y 255 tienen valores especiales descritos más adelante). Cuando se interpreta el valor en coma flotante, el número es desplazado de nuevo para obtener el exponente real.

El conjunto de valores posibles pueden ser divididos en los siguientes:
  • ceros
  • números normalizados
  • números desnormalizados
  • infinitos
  • NaN (¬E, no es un número, como por ejemplo, la raíz cuadrada de un número negativo)

Las clases se distinguen principalmente por el valor del campo Exp, siendo modificada ésta por el campo fracción. Considera Exp y Fracción como campos de números binarios sin signo (Exp se encuentra en el rango 0–255): 



ClaseExpFracción
Ceros00
Números desnormalizados0distinto de 0
Números normalizados1-254cualquiera
Infinitos2550
NaN (Not a Number)255distinto de 0


Para números normalizados, los más comunes, Exp es el exponente desplazado y Fracción es la parte fraccional del significante (o significando). El número tiene valor v:

v = s × 2e × m

Donde

s = +1 (números positivos) cuando S es 0

s = −1 (números negativos) cuando S es 1

e = Exp − 127 (en otras palabras, al exponente se le suma 127 y se almacena, a esto también se le llama "biased with 127" en inglés)


m = 1,Fracción en binario (esto es, el significando es el número binario 1 seguido por la coma decimal seguido por los bits de Fracción). Por lo tanto, 1 ≤ m < 2.












No hay comentarios.:

Publicar un comentario

Publicar un comentario