Download Representación de punto flotante

Document related concepts

Extensión de signo wikipedia , lookup

Precisión simple en coma flotante wikipedia , lookup

Desbordamiento aritmético wikipedia , lookup

IEEE coma flotante wikipedia , lookup

HDB3 wikipedia , lookup

Transcript
Representación de números
Representación de
punto flotante
Programación Orientada a Objeto
Ing. Civil en Telecomunicaciones
• Computador no puede representar
exactamente un número de punto flotante
(float) 1/3.0 = 0.3333333432567
Limitado por representación usando número
fijo de bits
Pérdida de precisión
Pérdida de exactitud
Aritmética de punto flotante
Números de precisión simple
• Actualmente, en forma generalizada, se
usa el formato IEEE-754
• Precisión simple (float) utiliza 32 bits
Este formato codifica números de punto
flotante de la forma (-1)s·1.m·2e
s corresponde al signo
m corresponde a la mantisa
e corresponde al exponente
Exponente e puede ser positivo o negativo
Mantisa m toma valores 0 ≤ f < 1
1 bit de signo s, 23 de mantisa m y 8 de
exponente e
• Exponente e va de -126 a +127
Codificado como e + 127
• Mantisa m va de 00….000 a 11….111
Parte fraccionaria f es 1 + m (“1 implícito”)
• Estos son los valores normalizados
No representan
Ejemplo de precisión simple
• Convertir entero 12345 a precisión simple
1234510 es 110000001110012
1.10000001110012x213
Eliminando el 1 y completando a 23 bits, se
tiene m = 10000001110010000000000
Exponente e = 127+13 = 140 = 100011002
El signo s es 0 (número positivo)
El resultado completo es 0x4640E400, o
0100 0110 0100 0000 1110 0100 0000 00002
Forma normalizada:
© 2015 Mario Medina C.
el 0!
Conversión de precisión simple
• Convertir 0x40490FDB a su equivalente
decimal en punto flotante
010000000100100100001111110010112
Signo 0 implica número positivo
Exponente 128 implica e es 1
Mantisa m es 100100100001111110010112
Con el 1 implícito es 1.100100100001111110010112,
que es 1. 570796410
Número es entonces 1.5707x21=3.141592710
1
Representación del 0
• Cero positivo
Bit de signo s es 0, bits del exponente e son 0s y
mantisa m es 0
0000 000 0000 0000 0000 0000 0000 00002
• Cero negativo (número válido!)
-0.0: bit de signo s es 1, bits del exponente e
son 0s y mantisa m es 0
1000 000 0000 0000 0000 0000 0000 00002
Infinito
• Bits del exponente e son sólo 1s y la mantisa
m vale 0
• Infinito positivo (+∞): 0111 1111 1000 0000
0000 0000 0000 00002
• Infinito negativo (-∞): 1111 1111 1000 0000
0000 0000 0000 00002
• Operaciones aritméticas propagan el valor
infinito
Infinito*-3 da por resultado -Infinito
NaN
• Not A Number (NaN)
• Bits del exponente e son sólo 1s
• Si mantisa m es diferente de 0, número es
NaN Ejemplo: Raíz de -1
NaN: 0111 1111 1000 0000 0000 0000 0000
00012
• Operaciones aritméticas también propagan
valor NaN
Números normalizados
• Número positivo más pequeño representable
en un float normalizado es 1x2-126
Bit s es 0, exponente e es 1 y mantisa m es 0
0000 0000 1000 0000 0000 0000 0000 00002
• Número positivo más grande representable
en un float normalizado es x(2-2-23)*2127
Equivalente a 2128 - 2104
Bit s es 0, e es 254 y mantisa m es sólo 1s
0111 111 0111 1111 1111 1111 1111 11112
Números denormalizados
• Números denormalizados permiten
representar números más pequeños aún, más
cercanos al 0
Bits del exponente e toman valor 0
Exponente es -126
Valor fraccionario f es m sin el 1 implícito
0000 0000 0000 0000 0000 0000 0000 00012
2-23x2-126
0000 0000 0111 1111 1111 1111 1111 11112
(1 - 2-23)x2-126
© 2015 Mario Medina C.
Ejemplos precisión simple
Descripción
Exponente Mantisa Valor
Cero
Denormalizado
mínimo
00…00
00…00
0….00
0….01
Denormalizado
Máximo
Normal mínimo
00…00
1….11
00…01
0….00
Uno
Normal máximo
01…11
11…10
0….00
1….11
0
2-23x2-126
Valor
decimal
0.0
1.4x10-45
(1-2-23) x2-126 1.2x10-38
1x2-126
1.2x10-38
1x20
1.0
(2-2-23)x2127 3.4x1038
2
Números de precisión doble
Ejemplos precisión doble
• Estándar IEEE-754 para doble precisión es
muy similar a precisión simple
Pero con más bits
• Precisión doble (double) utiliza 64 bits
1 bit de signo s, 52 de mantisa m y 11 de
exponente e
• Exponente e va entre -1022 y +1023
Descripción
Exponente Mantisa Valor
Cero
00…00
0….00
0
Denormalizado
mínimo
00…00
0….01
2-52x2-1022
Denormalizado
máximo
00…00
1….11
Normal mínimo 00…01
0….00
1x2-1022
Uno
0….00
1x20
1….11
(2-2-52)x21023
01…11
Valor
decimal
0.0
4.9x10-324
(1-2-52) x2-1022 2.2x10-308
2.2x10-308
1.0
Codificado como e + 1023
Normal máximo 11…10
Punto flotante en Intel x86
Ejercicios de punto flotante
• Procesadores Intel x86 tiene registros
especiales de 80 bits para punto flotante
1 bit de signo, 63 de mantisa y 15 de exponente
Incluye además 1 bit para el 1 implícito
Todas las operaciones de punto flotante entre
registros se realizan en 80 bits
Resultados se truncan y/o redondean a 64 o 32 bits
Estándar C tiene tipo de dato long
1.8x10308
double
• Indique si estas
aseveraciones
son V ó F
Suponga
int x;
float f;
double d;
x == (int) (float) x;
x == (int) (double) x;
3. f == (float) (double) f;
4. d == (float) d;
5. f == -(-f);
6. 2/3 == 2/3.0;
7. d < 0.0 implica (d*2) < 0.0
8. d > f implica –f > -d
9. d*d >= 0.0
10. (d + f) – d == f
1.
2.
para forzar este comportamiento
© 2015 Mario Medina C.
3