1.1.4
Números de punto flotante en 32 y 64 bits. 1.1.4 Números de punto flotante en
1.1.4 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. Por
ejemplo, el lenguaje de programación C, ahora
permite pero no requiere la aritmética de la IEEE (el tipo de C float es típicamente usado para la precisión simple de la
IEEE y el tipo double usa la precisión
doble del la IEEE).
El título completo del estándar es IEEE
Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985), y
también es conocido por IEC 60559:1989, Binary floating-point arithmetic for
microprocessor systems (originalmente el número de referencia era IEC
559:1989)
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:
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):
|
Clase |
Exp |
Fracción |
|
Ceros |
0 |
0 |
|
Números desnormalizados |
0 |
distinto de 0 |
|
Números normalizados |
1-254 |
cualquiera |
|
Infinitos |
255 |
0 |
|
NaN (Not a Number) |
255 |
distinto 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.
Notas:
Punto Flotante
Muchas aplicaciones requieren trabajar con números
que no son enteros. Existen varias
formas de representar números no enteros. Una de
ellas es usando un punto o coma fijo.
Este tipo de representació n ubica simpre el punto o
coma en alguna posición a la derecha
del dígito menos significativo.
Otra alternativa comunmente usada es la que se conoce
como representació n en punto
flotante. Bajo este esquema, un número puede ser
expresado mediante un exponente y una
mantisa. Por ejemplo el
número 10.75 puede ser expresado como
10.75x 10 0
10.75x 10 1
mantisa exponente
En general, un número en punto flotante puede ser
representado como ±d0.d1d2d3...dk x bexp
donde d0.d1d2d3...dk se conoce
como la mantisa, b es la base y exp es el exponente.
¿Qué se necesita para representar un número en punto
flotante?
· el signo del número.
· el signo del exponente.
· Dígitos para el exponente.
· Dígitos para la mantisa.
Dado que un número en punto flotante puede expresarse
de distintas formas que son
equivalentes, es necesario establecer una única
representación. Es por ello que se trabaja
con números normalizados. Decimos que un
número está normalizado si el dígito a la
izquierda del punto o coma está entre 0 y la base (
0< dígito a la izquierda del punto < b).
En particular, decimos que un número binario está
normalizado si el dígito a la izquierda
del
punto es igual a 1.
1.00x 10 -1
0.01x
10 2
Estándar IEEE-754 para representación de
Punto Flotante
Este estándar se desarrolló para
facilitar la portabilidad de los programas de un procesador
a otro y para alentar el desarrollo de
programas numéricos sofisticados. Este estándar ha
sido ampliamente adoptado y se utiliza
prácticamente en todos los procesadores y
coprocesadores aritméticos actuales. El
estándar del IEEE define el formato para precisión
simple de 32 bits y para precisió n doble de 64 bits.
Precisión Simple
El formato para los números de precisión
simple es de 32 bits.
|
signo |
exponente con signo |
Mantisa |
|
1 |
8 |
23 |
La representación de un número en
precisión simple en el formato IEEE-754 consta de las
siguientes partes:
· Signo se encuentra en el bit más
significativo, de esta manera podemos usar la misma circuitería ( de enteros)
para llevar a cabo comparaciones con respecto al cero.
· Exponente con signo. Está conformado por los
siguientes 8 bits. Esta ubicación
del exponente en la palabra facilita las
comparaciones de números. Si los números se encuentran normalizados, comparamos
los exponentes. SI son iguales pasamos a comparar las mantisas. Pero, ¿ qué
representación es más conveniente usar para el exponente?. Si utilizamos
Complemento a Dos, los exponentes negativos aparecerán como mayores que los
exponentes positivos al usar la circuitería de enteros.
C2(-1) = 1111 1111
C2(0) = 0000 0000
C2(1) = 0000 0001
Para evitar este inconveniente, se utiliza una
representación en exceso N de
forma que el exponente más negativo posible quede en
0000 0001 y el más
grande de los positivos en 1111 1110. El estándar
IEEE 754 usa como exceso
127
para precisió n simple.
Exponente más negativo representable:
x + 127 = 0000 0001
x = -126
Exponente más grande representable
x + 127 = 1111 1110
x = 127
· Mantisa. Está formada por el resto de los
bits en la palabra (23). Como los
números se representan de manera normalizada entonces
siempre tendremos un
1 a la izquierda del punto. Por lo tanto este dígito
no es necesario almacenarlo
en la palabra y se tiene de manera implícita. La
mantisa consiste en 24 bits de
precisión.
Precisión Doble
La representación de un número en
precisión n doble en el formato IEEE-754 consta de las
siguientes partes:
· Signo se encuentra en el bit más significativo
· Exponente en exceso. Está conformado por los
siguientes 11 bits. Se utiliza una
representació n en exceso 1023 de forma que el
exponente má s negativo posible
quede en 000 0000 0001 y el más grande de los
positivos en 111 1111 1110.
· Mantisa.
Está formada por 52 bits más el bit implícito (53).
|
signo |
exponente en exceso |
Mantisa |
|
1 bit |
11 bits |
52 bits |
Casos Especiales
Para valores de exponente desde 1 hasta
254 en el formato simple y desde 1 a hasta 2046
en el formato doble, se representan
números en punto fijo normalizados. El exponente está
en exceso, siendo el rango del exponente
de -126 a +127 en el formato simple y de -1022
a +1023 en el doble.
Un número normalizado debe contener un
bit 1 a la izquierda del punto binario; este bit
está implícito, dando una mantisa
efectiva de 24 bits para precisión simple o 53 bits para
precisión doble.
Un exponente cero junto con una parte
fraccionaria cero representa el cero positivo o
negativo, dependiendo del bit de signo. Es útil tener una
representación del valor 0 exacto.
Precisión simple
|
Exponente en exceso |
Mantisa |
Valor |
|
0 |
0 |
cero |
|
0 |
<>0 |
Número no normalizado (0. + Mantisa) x 2-126 |
|
1..254 |
|
(1. + Mantisa) x 2exp-127 |
|
255 |
0 |
Infinito |
|
255 |
<>0 |
No es número |
Precisión doble
|
Exponente
en exceso |
Mantisa |
Valor |
|
0 |
0 |
Cero |
|
0 |
<>0 |
Número no normalizado (0. + Mantisa) x 2-1022 |
|
1 .. 2046 |
|
(1. + Mantisa) x 2exp-1023 |
|
2047 |
0 |
Infinito |
|
2047 |
<>0 |
No es número |
|
|
|
|
Fuentes.
http://es.wikipedia.org/wiki/IEEE_coma_flotante