Está en la página 1de 7

Captulo 2

El sistema de doble precisi


on
de Matlab
2.1.

Introducci
on

Los calculos numericos que se realizan con una computadora (o calculadora) no son iguales a los que se hacen en los cursos de algebra o calculo.
En la aritmetica computacional (de punto flotante) no se cumple la igual

dad ( 3)2 = 3. La computadora no trabaja con el n


umero 3 sino con
una aproximacion cuyo cuadrado no sera exactamente 3, pero que estara lo

suficientemente cerca de 3 como para resultar aceptable. El n


umero 3 es
irracional y su desarrollo decimal es infinito y no periodico; sin embargo, la
computadora solo almacena y manipula un trozo finito de dicho desarrollo.
Este es el origen del llamado error de redondeo: la computadora, al manejar un n
umero finito de dgitos, solo puede representar en la forma punto
flotante una cantidad finita de n
umeros reales, pero el conjunto de los n
umeros reales es infinito. Por ello, los calculos realizados en una maquina se llevan
a cabo con representaciones aproximadas de los n
umeros reales implicados.

2.2.

El sistema de doble precisi


on de Matlab

Desde 1985 todas las computadoras usan el mismo tipo de aritmetica

de punto flotante (adoptado por IEEE). Esta


puede ser de simple o doble
precision. Vamos a referirnos a la de doble precision usada por Matlab.
Un n
umero x no nulo para la maquina tiene la forma punto flotante
x = (1 + f ) 2n (0 f < 1),
donde f se denomina mantisa y n (exponente), que es un entero del intervalo
1022 n 1023 (notese que 210 = 1024).
f debe cumplir una segunda condicion: su representacion binaria debe usar
tan solo 52 bits. Es decir, f en base 2 tendra la forma decimal siguiente:
f = 0 d1 d2 d3 d52 ,
donde los di son todos ceros o unos. Por ello, la mantisa f puede tomar 252
valores distintos (variaciones con repeticion de {0, 1} tomadas de 52 en 52).
En el sistema decimal f es el valor de la suma
d1 d2
d52
+ 2 + + 52 .
2
2
2
Es decir, la maquina escribe x en la forma
(1 +

d1 d2
d52
+ 2 + + 52 ) 2n ,
2
2
2

(2.1)

que puede ser almacenado en memoria como una cadena de 64 bits: el primer
bit es 0 o 1, seg
un x sea positivo o negativo, los 11 siguientes corresponden a la
expresion en binario de n+1023 ( n+1023 es un n
umero natural comprendido
entre 1 y 2047, que en binario se expresa con 11 dgitos) y los 52 restantes
son d1 , .., d52 que corresponden a la mantisa f .
En nuestra relaci
on con la m
aquina usamos la base 10, es decir,
entramos los datos en el sistema decimal y, a su vez, la m
aquina
6

nos muestra los resultados en el mismo sistema. Ahora bien, internamente opera en binario por lo que todos los datos suministrados
a la m
aquina son autom
aticamente pasados a la base 2 para expresarlos en la forma (2.1) que permite su almacenamiento como una
cadena de 64 bits.

Ejemplos 2.2.1. 1. x = 1/2 se expresa en forma punto flotante como (1 +


0) 21 . La mantisa es f = 0 y el exponente n = 1.
2. Sea x = 1 + 12 + 14 + 81 . Como x = 20 + 21 + 22 + 23 , x se escribe
en base 2 en la forma 1 1112) . Por tanto, la forma punto flotante sera x =
+(1 + 0 1112) ) 20 . La mantisa en binario es f = 0 1112) y el exponente n = 0
y se almacena como la cadena
Signo
0

Exponente
01111111111

Mantisa
1 1 1 0 0 0 00 (49 ceros)

El primer bit es 0 por ser x positivo, los 11 siguientes corresponden a la


expresion en binario de n + 1023 = 0 + 1023.

2.3.

El error de redondeo

264 es la cantidad total de n


umeros que se pueden expresar en la forma
punto flotante anterior, de hecho, tanto como variaciones con repeticion de
dos elementos (0 y 1) tomados de 64 en 64. Por tanto, el conjunto de todos los
n
umeros en punto flotante es finito, mientras que el conjunto de los n
umeros
reales es infinito. Por ello, para manejar n
umeros que no pueden expresarse
de esta forma, estos se reemplazan por otros (muy cercanos) que s pueden
ser escritos en la forma punto flotante. Este hecho se conoce con el nombre
de redondeo y el error que se comete error de redondeo. Se demuestra que el
redondeo de un n
umero tiene entre 15 y 16 cifras significativas exactas (en el
sistema decimal).

Ejemplo 2.3.1. Si calculamos con Matlab el valor de la expresion a = 1


3(4/31), obtenemos a = 2.22046016, en lugar de 0. El error de redondeo se
produce al hacer la division 4/3 (esta division sera exacta en un computador
que usara la base 3).
El mayor n
umero maquina positivo se obtiene tomando f = (1/2) +
2
(1/2 ) + + (1/252 ) y n = 1023. En Matlab este n
umero se llama realmax
y su valor es 1.797e + 308. El menor n
umero maquina positivo se obtiene
tomando f = 0 y n = 1022. En Matlab se denomina realmin y su valor
es (1 + 0) 21022 = 21022 = 2.2251e 308. Todos los n
umeros positivos
que se pueden expresar en la forma punto flotante estan comprendidos entre
realmin y realmax.
Cuando el resultado de una operacion produce un n
umero inferior a realmin, dicho resultado se toma como 0 y contin
uan los calculos (underflow).
Por el contrario, si el resultado de una operacion es un n
umero superior a
realmax, se produce lo que se denomina un desbordamiento (en ingles, overflow). Si este es el caso, el resultado es un n
umero excepcional que se denota
por inf (infinito) y se detienen los calculos.
La distancia entre 1 y el primer n
umero punto flotante mas grande que 1
se denota por eps y se denomina el epsilon de la maquina. (1+0)20 es 1 en la
forma punto flotante. Por tanto, el siguiente es x = (1 + 252 ) 20 = 1 + 252 .
Por ello, eps = 252 = 2.2204e 016. Todo n
umero del intervalo (1, 1 + eps),
al ser redondeado, se convierte en uno de los extremos. Dado un n
umero
x [1, 2], denotamos por r(x) (valor redondeado de x) el valor aproximado
con que trabaja la maquina. Entonces ea = |x r(x)| es el error absoluto
de redondeo que, por lo que acabamos de ver, es menor o igual que
eps/2 = 253 .
Es importante notar que entre cada dos potencias consecutivas, pongamos
n
2 y 2n+1 , hay la misma cantidad de n
umeros en punto flotante: 252 . Estos
n
umeros estan igualmente espaciados y se escriben en la forma
(1 + f ) 2n (0 f < 1).
8

Recuerdese que en la expresion anterior, la mantisa f puede tomar 252 valores


distintos. El primer n
umero en punto flotante que es mayor que (1+0)2n = 2n
es (1 + 252 ) 2n . Por tanto, la distancia entre ambos es 252+n . Entonces
el error absoluto de redondeo ea , para los x [2n , 2n+1 ], es menor
o igual que 253+n . Esto prueba que el error absoluto de redondeo
aumenta con n. Por ello, si se quiere mantener la precision de 15 o 16
decimales, se deben evitar las operaciones con n
umeros grandes, dividiendo
por un factor adecuado (este hecho se denomina normalizacion del problema).
Aunque el error absoluto de redondeo ea = |x r(x)| aumenta con el
tama
no de x, el error relativo er = |(x r(x)/x| es menor o igual que
53
2
cualquiera que sea x. En efecto, si x [2n , 2n+1 ], se tiene

er =

253+n
x r(x) ea
=

= 253 .
n
x
x
2

Si el resultado de un calculo intermedio esta afectado de un error de


redondeo, este error influye en los resultados de los calculos posteriores en los
que intervenga dicho resultado intermedio, produciendo lo que se denomina
propagaci
on del error. Un algoritmo se llama inestable cuando los errores
intermedios tienen una gran influencia sobre el resultado final.
Para terminar, vamos a mostrar c
omo el error de redondeo puede dar lugar a un resultado muy alejado del deseado cuando se
divide por un n
umero positivo muy peque
no o cuando se restan
dos n
umeros muy parecidos.
1) Vamos a ver como se multiplica el error de redondeo cuando se realiza
una division por un n
umero muy peque
no.
Si denotamos por r(x) la representacion en la forma punto flotante de un
n
umero x, el error de redondeo viene dado por = |x r(x)|. Si realizamos
la division x/y con una computadora, siendo y un n
umero peque
no, cuanto
vale el error? Para facilitar el calculo, supongamos que y = 2k , siendo k un
n
umero natural grande. Si r(x) = (1 + f ) 2n , notese que
r(x/2k ) = (1 + f )2n+k = r(x)/2k ,
9

si n + k 1023. Entonces el error en la division x/2k vale exactamente





x
r(x) |x r(x)|
k =
= 2k |x r(x)|.
k
2
2
2k

Luego el error en la division x/2k es igual al producto del error en el redondeo de x por el factor 2k y recuerdese que k es un n
umero natural grande.
Esto nos da una idea muy clara de como el error de redondeo de x se multiplica gravemente al realizar una division posterior x/y con y un n
umero muy
peque
no.
2) Dos n
umeros distintos pueden tener igual representaci
on punto flotante
y, por tanto, al hacer su diferencia con Matlab se obtiene 0.
Si calculamos con Matlab la expresion (100 100 + 1e 15) 1e + 17 se
obtiene 100 (resultado correcto). Sin embargo, si calculamos (100 + 1e 15
100)1e+17 se obtiene 0 (resultado incorrecto). La diferencia tan enorme entre
ambos se debe a que en el primer caso calcula el valor exacto de 100 100,
cero, y despues realiza el producto tambien exacto. Por el contrario, en el
segundo caso, hace primero la suma s = 100 + 1.0e 15 y a continuacion
procede a calcular la diferencia s 100 y obtiene como resultado 0 porque
ambos n
umeros tienen la misma forma punto
flotante.
5
5
ex e 2x
3) Consideremos la funcion f (x) =
. Se quiere calcular su lmite
x5
cuando x 0, evaluando f en puntos cada vez mas cercanos a 0. Con el
programa de Matlab
>>x=[0.1,0.01,0.001,0.0001,0.00001,0.000001,0.0000001];
y=(exp(x.5) - exp(sqrt(2)*x.5))./x.5
se obtiene:
y = 0.4142, 0.4142, 0.2220, 0, 0, 0, 0.
A la vista del resultado obtenido, podramos concluir que lmx0 f (x) = 0

y, sin embargo, el lmite es 1 2, como se obtiene facilmente aplicando la


regla de LHopital.
EJERCICIOS PROPUESTOS

10

1. Expresar en la base 2 los n


umeros: 12, 25, 35, 1025.
2. Expresar en el sitema decimal los n
umeros: 11012) , 0 112) y 10 012) .
3. Elaborar un programa para determinar el valor del n
umero realmax.
4. a) Si x = realmax, calcular x2 . b) Si x = realmin, calcular x2 .
5. Calcular el n
umero maquina inmediatamente anterior a 1.
6. Expresar en el sistema decimal los n
umeros que corresponden a las cadenas
binarias siguientes:
a)
Signo
1

Exponente
00000111111

Mantisa
0 0 1 0 0 0 00 (49 ceros)

b)
Signo
0

Exponente
00000000011

Mantisa
0 0 0 00 (50 ceros)1 1

7. Calcular con Matlab 10309 y comprobar que el resultado es infinito. Explicar la razon.
8. Las races de la ecuacion x2 (64+1015 )x+(641015 ) = 0 son x1 = 64 y
x2 = 1015 . Calcular sus races con Matlab y comprobar que el resultado
obtenido para la menor de ellas no coincide con el exacto en ninguna cifra
significativa.

11