Download Tema 4: Representación de números en el computador.

Document related concepts

Precisión simple en coma flotante wikipedia , lookup

Coma flotante wikipedia , lookup

IEEE coma flotante wikipedia , lookup

Representación de números con signo wikipedia , lookup

Unidades de información wikipedia , lookup

Transcript
Tema 4: Representación de números en el computador.
Representación de números en el computador, aritmética del computador
y errores de redondeo. Uso del comando whos.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Representación de punto flotante bajo el estándar IEEE
El Instituto de Ingenieros Eléctricos y Electrónicos (IEEE por sus siglas en
inglés) publicó en 1985 el estándar IEEE 754 que rige la forma de
almacenar y operar los números de punto flotante en el computador.
En la actualidad, la mayoría de los
computadores personales de escritorio y
portátiles poseen arquitectura de 32 bits,
lo que significa que los números de
punto flotante, en precisión simple, son
almacenados usando 32 dígitos binarios
siguiendo el mencionado estándar.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Terminología asociada con la representación de números en el computador
bit Hace referencia a un dígito binario (0 ó 1) y proviene de la contracción de las
palabras inglesas "binary digit". Es la unidad de almacenamiento en el
computador y está asociada a una celda electrónica.
byte Es un conjunto de 8 bits. Así, en MATLAB, un número ocupa 8 bytes, lo cual
equivale a 64 bits. Esto se debe a que MATLAB trabaja automáticamente en
precisión doble.
palabra En el computador, una palabra es un conjunto de bits o celdas electrónicas,
que representan un número en base 2. En la mayoría de las arquitecturas
computacionales actuales, las palabras del computador ocupan 32 bits
(existen, sin embargo, arquitecturas de 64 bits para PC en la actualidad).
precisión simple En el estándar IEEE 754, se refiere al almacenamiento de un número
usando de 32 bits, siguiendo dicho estándar .
precisión doble En el estándar IEEE 754, se refiere al almacenamiento de un número
usando 64 bits, siguiendo dicho estándar .
número de máquina Se refiere a cualquier número que se obtenga a partir de la
representación de punto flotante normalizada o desnormalizada
bajo el estándar IEEE 754. Se incluye al cero y a los números
enteros representables.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Representación en base 10 de un número
0.10110 = 1 ⋅10 −1 + 0 ⋅10 − 2 + 1 ⋅10 −3 =
1
1
+
= 0.101
10 1000
Representación en base 2 de un número
0.1012 = 1 ⋅ 2 −1 + 0 ⋅ 2 − 2 + 1 ⋅ 2 −3 =
1 1
+ = 0.62510
2 8
11011.012 = 1 ⋅ 2 4 + 1⋅ 23 + 0 ⋅ 2 2 + 1⋅ 21 + 1⋅ 20 + 0 ⋅ 2 −1 + 1 ⋅ 2 −2
1
= 16 + 8 + 2 + 1 + = 27.2510
4
En general
x = (an an −1 L a1a0 . a−1a− 2 L a− m ) 2 =
an ⋅ 2 n + an −1 ⋅ 2 n −1 + L + a1 ⋅ 21 + a0 ⋅ 2 0 + a−1 ⋅ 2 −1 + a− 2 ⋅ 2 − 2 + L + a− m ⋅ 2 − m
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Representación en base 2 de un número entero
x = (an an −1 L a1a0 ) 2 = an ⋅ 2 n + an −1 ⋅ 2 n −1 + L + a1 ⋅ 21 + a0 ⋅ 2 0 =
2(an ⋅ 2 n −1 + an −1 ⋅ 2 n − 2 + L + a1 ) + a0
Luego a0 es el resto de dividir x entre 2.
n
o
c
x = 2 ⋅ x1 + r0
y
x1 = an ⋅ 2 n −1 + an −1 ⋅ 2 n − 2 + L + a1
r0 = a0
Para hallar el siguiente dígito a1, aplicamos el mismo procedimiento a x1
n
o
c
x1 = an ⋅ 2 n −1 + an −1 ⋅ 2 n − 2 + L + a1 = 2 ⋅ x2 + r1
y
x2 = an ⋅ 2 n − 2 + an −1 ⋅ 2 n −3 + L + a2
r1 = a2
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Representación en base 2
Ejemplo1:
x = 25
⇒
x = 2 ⋅12 + 1 ⇒
a0 = 1
x1 = 12
⇒
x1 = 2 ⋅ 6 + 0
⇒
a1 = 0
x2 = 6
⇒
x2 = 2 ⋅ 3 + 0
⇒
a2 = 0
x3 = 3
x3 = 2 ⋅1 + 1 ⇒
a3 = 1
x4 = 1 ⇒
x4 = 2 ⋅ 0 + 1 ⇒
a4 = 1
x5 = 0
a
z
i
l
a
n
i
f
⇒
25
2
1
12
2
0
6
2
0
3
2
1
1
2
1
0
Los dígitos se van obteniendo desde el menos (a0) significativo hasta el más
significativo (an), por lo tanto debemos escribir la representación del número x en
base 2 tomando los restos sucesivos en el orden indicado por la flecha de la gráfica.
por lo tanto
(25)10 = (11001)2
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Representación en base 2 de la parte fraccionaria de un número
x = (.a−1a− 2 L a− m ) 2 = a−1 ⋅ 2 −1 + a− 2 ⋅ 2 −2 + L + a− m ⋅ 2 − m
1
(a−1 + a− 2 ⋅ 2 −1 + L + a− m ⋅ 2 − m +1 )
2
2 x = a−1 + a− 2 ⋅ 2 −1 + L + a− m ⋅ 2 − m +1
luego
así, a-1 es la parte entera de 2x, y repetimos el mismo proceso
para calcular el siguiente dígito
Ejemplo2:
x = 0.8125
2 x = 1.625
⇒
x1 = 0.625 ⇒
2 x1 = 1.25 ⇒
⇒
2 x2 = 0.50
x3 = 0.50
⇒
2 x 2 = 1 .0
a
z
i
l
a
n
i
f
x2 = 0.25
x4 = 0.0
⇒
por lo tanto
⇒
⇒
a−1 = 1
a− 2 = 1
a−3 = 0
a− 4 = 1
(0.8125)10 = (0.1101)2
Prof. Saúl. Buitrago y Oswaldo Jiménez
tomando los dígitos en
el orden indicado por la
flecha de la gráfica
4. Representación de números en el computador
Ejemplo: ´Para el número 42,375 se procede como sigue.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Representación en base 16
En muchas ocasiones, los usuarios de computadora avanzados, tal como los
programadores de Assembler o lenguaje Ensamblador, requieren conocer directamente el
contenido binario de una o más palabras del computador. Dado lo largo de la secuencia de
32 bits o de 64 bits, es muy común que los sistemas operativos muestren el contenido
binario de las palabras de computadora en base 16 en lugar de mostrarlo en base 2.
Esta convención se refiere sólo al despliegue de la información, no al almacenamiento
propiamente dicho.
decimal
binario
base 16
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0
1
2
3
4
5
6
7
8
9
A
B
C
D
El número binario se divide en bloques de 4 dígitos (la parte entera de derecha a
izquierda y la parte decimal de izquierda a derecha) desde el punto decimal
(361.7891)10 = (0001 | 0110 | 1001.1100 | 1010) 2 = (169.CA)16
1
6
9
C
Prof. Saúl. Buitrago y Oswaldo Jiménez
A
E
F
4. Representación de números en el computador
Representación en base 16
Justificación del cálculo
(101101001 .110010 ) 2 = (0001 | 0110 | 1001.1100 | 1010) 2 = (169.CA)16
x = (. b−1b− 2b−3b− 4b−5b−6b−7b−8 L) 2
= b−1 ⋅ 2 −1 + b− 2 ⋅ 2 − 2 + b−3 ⋅ 2 −3 + b− 4 ⋅ 2 − 4 + b−5 ⋅ 2 −5 + b−6 ⋅ 2 −6 + b−7 ⋅ 2 −7 + b−8 ⋅ 2 −8 + L
= (8b−1 + 4b− 2 + 2b−3 + b− 4 ) ⋅ 2 − 4 + (8b−5 + 4b−6 + 2b−7 + b−8 ) ⋅ 2 −8 + L
= (8b−1 + 4b− 2 + 2b−3 + b− 4 ) ⋅16 −1 + (8b−5 + 4b−6 + 2b−7 + b−8 ) ⋅16 − 2 + L
notar que los b-i, i=1,2,3,…, son los números 0 o 1, y la operación entre
paréntesis produce dígitos entre 0 y 15, los cuales corresponden con los
símbolos entre 0 y 9 o A y F.
Observación. El proceso de conversión entre números de base 2 y base 8 se
lleva a cabo en forma similar, en este caso se usan bloques de 3 dígitos.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Representación en base β
Sea β la base usada en el computador, β = 2,8,16. El sistema más apropiado
para representar números en un computador electrónico es el binario (base 2).
Sea x un número real, con x distinto de cero y normalizado
x = σ ( d 0 . d1 d 2 L d t ) β β
(e)β
donde
σ representa el signo de x
(d 0 .d1d 2 L d t ) β
la mantisa en base β
(e) β el exponente en base β
d 0 es un número entero entre 1 y β − 1
Ejemplo de normalización de un número en base 2:
Sea el número x = (49.8125)10
5 en base 2
x = (110001 .1101)2 = (1.100011101 )2 2 (101)2
5 posiciones
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
El estándar IEEE 754 para la representación de números de punto flotante en
precisión simple supone el uso de palabras de 32 bits.
Así, un número x puede ser representado usando:
• 1 bit para el signo
• 8 bits para el exponente (la característica)
• 23 bits para la parte fraccionaria (la mantisa)
El bit b1 representa el signo del número, valiendo 0 si el número es positivo
y 1 si el número es negativo.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Los siguientes 8 bits comprendidos entre el b2 y el b9 almacenan el exponente e.
El valor e de la representación no se almacena directamente, lo que se
almacena es el resultado de sumarle a e un valor fijo llamado sesgo.
Los 8 dígitos para el exponente en base 2, representan un intervalo que va del 0
al 28-1 = 255
1
1
1
1
1
1
1
1
= 1 ⋅ 2 7 + 1 ⋅ 2 6 + L + 1 ⋅ 21 + 1 ⋅ 2 0 =
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
A fin de obtener un rango de exponentes positivos y negativos alrededor de
cero, se resta 127 del exponente, de manera que el intervalo para el exponente
es en realidad [-127, 128].
El 127 es justamente el sesgo mencionado.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
En base 2, se tiene que la parte entera de la mantisa, esto es d0, siempre
será igual a 1. Por lo tanto no es necesario almacenar ese valor.
Los dígitos de la mantisa que sí se almacenan son d1, d2, …, dt, es decir los
dígitos de la parte fraccionaria de la mantisa, se denotaran como m.
Si t = 23, es claro que se deben almacenar 23 dígitos, que es justamente la
cantidad de bits reservados para la mantisa en el estándar.
Luego, los dígitos d1, d2, …, dt se almacenan en los bits b10, b11, …, b32
respectivamente.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
5 en base 2
Retomando el ejemplo x = 49.8125
x = (110001.1101)2 = (1.100011101 )2 2 (101)2
El número normalizado
x = (1.100011101 )2 2 (101)2
se representa como
0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
signo
exponente
1 bit
8 bits
mantisa
23 bits
el exponente e = (5 + 127 (sesgo))2 :
e = 5 + 127 = 132 = (10000100 )2
el signo s se representa como 0 si es positivo y 1 si es negativo, en este caso s=0
la parte fraccionaria de la mantisa es (100011101)2 de donde m = (0.100011101)2
El uso de este sistema proporciona un número en punto flotante de la forma
(−1)s 2e −127 (1 + m )
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
El número de máquina menor que le sigue al número
0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
= 49. 8125
es el número
0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
= 49. 81249618530273
y el siguiente número de máquina mayor es
0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
= 49. 81250381469727
Esto significa que nuestro número de máquina original representa no sólo a
49.8125 sino también a los números que están en el intervalo entre corchetes
(línea azul).
[
49. 81249618530273
49.8125
float2dec.m
Prof. Saúl. Buitrago y Oswaldo Jiménez
]
49. 81250381469727
4. Representación de números en el computador
Ejemplo: Representación punto flotante de algunos números en base decimal
0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 = 1.0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 = 2.0
1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 = -6.5
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 = +0
El conjunto de números de máquina posee un conjunto de características
importantes, a saber:
• Es un conjunto finito y discreto.
• Es simétrico respecto al cero (existe la misma cantidad de números de
máquina negativos y positivos).
• Los números de máquina se aglomeran a medida que se acercan al
cero.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
El estándar IEEE 754 para la representación de los números de punto flotante
en precisión doble supone el uso de palabras de 64 bits y se basa en la
notación científica normalizada.
Esquematicemos la palabra de 64 bits como se muestra a continuación
El bit b1 representa el signo del número, valiendo 0 si el número es positivo y
valiendo 1 si el número es negativo; los siguientes 11 bits comprendidos entre
b2 y b12 almacenan el exponente y, finalmente, los últimos 52 bits de la palabra
sirven para almacenar la mantisa.
Dado que se está considerando la números normalizados en base 2, se tiene
que la parte entera de la mantisa, esto es d0, siempre será igual a 1.
El sesgo a ser usado para el exponente es 1023.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Se define el épsilon de la máquina como la distancia entre 1 y el siguiente
número representable mayor que 1.
De acuerdo al estándar IEEE 754, el épsilon de la máquina en precisión simple
es 2-23 ≈ 1.192092895507813e-007, mientras que en precisión doble es 2-52 ≈
2.220446049250313e-016.
En MATLAB estas cantidades son proporcionadas por la función eps, invocada
con el parámetro 'single' en el primer caso y sin parámetros en el segundo.
En general, si en la representación de punto flotante se usan n bits para
almacenar la mantisa, entonces el épsilon de la máquina es 2-n.
Ejemplo: Representación punto flotante de eps en precisión simple (23 bits
para almacenar la mantisa)
0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
El épsilon de la máquina posee una caracterización que suele ser útil para
calcularlo sin conocer el estándar de almacenamiento del computador.
Dicha caracterización es la siguiente:
"El épsilon de la máquina es el número más pequeño de la forma 2-k (k
entero positivo) tal que 1 + 2-k ≠ 1".
Quiere decir que en el computador alguna potencia negativa de 2 no le
agrega nada al número 1, es decir, debe existir un entero positivo m tal que
1+2-m = 1.
¿Cuál es el valor más pequeño de m en precisión simple y doble?
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Existe un número de máquina más grande:
en precisión simple es
127
2
23
× (1.111K11) 2 = 2
127
× (1 + ∑ 2 − k ) ≈ 3.402823466385289 e + 038
k =1
23 unos después
del punto
en precisión doble es
1023
2
× (1.111K11) 2 = 2
1023
52
× (1 + ∑ 2 − k ) ≈ 1.797693134862316 e + 308
52 unos después
del punto
k =1
Estos valores son suministrados por la función realmax de MATLAB,
pasándole el argumento 'single' y ningún argumento para precisión doble,
esto es, realmax('single') en el primer caso y realmax en el segundo caso.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Existe un número de máquina positivo normalizado más pequeño:
en precisión simple es
2 −126 × (1.000 K 00) 2 = 2 −126 × 1 ≈ 1.1754943508 22288 e + 038
23 ceros después
del punto
en precisión doble es
2 −1022 × (1.000 K 00) 2 = 2 −1022 × 1 ≈ 2.2250738585 07201 e − 308
52 ceros después
del punto
Estos valores son suministrados por la función realmin de MATLAB,
pasándole el argumento 'single' y ningún argumento para precisión doble,
esto es, realmin('single') en el primer caso y realmin en el segundo caso.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Errores de redondeo y aritmética del computador
Redondeo.
Es el proceso de aproximar un número no de máquina por un número de
máquina. Más específicamente, si el número de máquina que se elige para la
aproximación es aquel que está más cerca del número dado, se habla de
redondeo correcto.
Error de redondeo.
Es el error que se comete al aproximar un número que no es de máquina por
un número de máquina. Resulta que el error de redondeo (relativo) está
acotado por el épsilon de la máquina.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Si p* es una aproximación de p, definimos dos tipos de errores:
El error absoluto, que viene dado por
EA =| p * − p |
El error relativo, que está dado por
ER =
siempre y cuando p sea distinto de cero.
| p * −p|
| p|
Ejemplo:
p = 0.3000 ×101
p = 0.3000 ×10 −3
p* = 0.3100 ×101
p* = 0.3100 ×10 −3
EA = 0.1
EA = 0.1×10 − 4
ER = 0.3333 ×10−1
ER = 0.3333 ×10−1
Observaciones:
• el error relativo en ambos casos es el mismo, mientras los errores absolutos
son diferentes
• como medida de precisión el error absoluto puede ser engañoso, en cambio
el error relativo puede ser más significativo
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
El ejemplo que se muestra a continuación ilustra como los errores de
redondeo podrían de alguna manera inutilizar el resultado de una operación.
Por conveniencia se trabajará en base 10 con una aritmética de tres dígitos
significativos para el almacenamiento.
Ejemplo:
Consideremos la siguiente suma:
0.99 + 0.0044 + 0.0042.
Con aritmética exacta (los números se pueden almacenar totalmente, no hay
errores de redondeo), el resultado es 0.9986.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Ejemplo (cont.):
Sin embargo, si usamos una aritmética de tres dígitos significativos, y las
operaciones se realizan siguiendo el orden de izquierda a derecha,
encontramos que
(0.99+0.0044)+0.0042 = 0.994+0.0042 = 0.998.
Por otra parte, si operamos primero los dos últimos números, y después
sumamos el primero, tenemos que:
0.99+(0.0044+0.0042) = 0.99+0.0086 = 0.999,
lo cual demuestra el efecto del error por redondeo en un caso tan simple
como éste.
(¿Por qué sucede esto?).
Desde el punto de vista numérico es importante el orden en que sumamos.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Operaciones que producen errores en MATLAB:
• La suma de muchos números siempre genera errores de redondeo, lo
importante es que estos errores no inutilicen el resultado.
• La suma de números de magnitudes distintas.
• la sustracción de números casi iguales.
Ejemplo:
10^20 - (10^20 +1)
es igual a 0 en MATLAB
(10^20 - 10^20) -1
es igual a -1 en MATLAB
aunque matemáticamente 10^20 - (10^20 +1) = (10^20 - 10^20) -1 = -1
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Ejemplo:
Sabemos que 1.0 – 5 * 0.2 = 0, pero si lo calculamos en MATLAB de la
siguiente manera
>> 1 - 0.2 - 0.2 - 0.2 - 0.2 - 0.2
ans =
5.5511e-017
Este resultado es bastante pequeño, pero no es cero.
La razón de esto es que el numero binario correspondiente a 0.2 es
0.001100110011001100 …
Esta representación requiere un número infinito de dígitos. La consecuencia
de esto es que el computador trabaja con una aproximación de 0.2, y restar a
1 una aproximación de 0.2 cinco veces no conduce a cero.
Prof. Saúl. Buitrago y Oswaldo Jiménez
4. Representación de números en el computador
Comando “whos”
Lista todas las variables en el espacio de trabajo (workspace), en conjunto con
la información acerca de su tamaño, número de bytes reservados para
almacenarla, tipo/clase, etc.
Ejemplo: para los comandos siguientes
>> A = [ 1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16 ];
>> B = [5 6 7 8]
>> b = 1/0;
>> c = pi;
>> cc = 1 - 2i;
>> ff = 1 + 1 > 2;
>> ~(1 + (6.8 + 5 < 45) * 3);
>> whos
Name
A
B
ans
b
c
cc
ff
Size
4x4
1x4
1x1
1x1
1x1
1x1
1x1
Bytes
128
32
1
8
8
16
1
Prof. Saúl. Buitrago y Oswaldo Jiménez
Class
double
double
logical
double
double
double
logical
Attributes
complex
Colocar ejemplo 0.1 base 10 y base 2, usando representación de 64 bits
¿Qué sucede aquí?
>> 0.5-0.1-0.1-0.1-0.1-0.1
ans =
2.7756e-017
>> 0.5-0.1*5
ans =
0
Prof. Saúl. Buitrago y Oswaldo Jiménez