You are on page 1of 7

Cap´ıtulo 2

El sistema de doble precisi´
on
de Matlab
2.1.

Introducci´
on

Los c´alculos num´ericos que se realizan con una computadora (o calculadora) no son iguales a los que se hacen en los cursos de ´algebra o c´alculo.
En la aritm´etica 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 aproximaci´on cuyo cuadrado no ser´a exactamente 3, pero que estar´a lo

suficientemente cerca de 3 como para resultar aceptable. El n´
umero 3 es
irracional y su desarrollo decimal es infinito y no peri´odico; sin embargo, la
computadora s´olo 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 d´ıgitos, s´olo 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 c´alculos realizados en una m´aquina se llevan
a cabo con representaciones aproximadas de los n´
umeros reales implicados.

5

2. entramos los datos en el sistema decimal y. El sistema de doble precisi´ on de Matlab Desde 1985 todas las computadoras usan el mismo tipo de aritm´etica ´ de punto flotante (adoptado por IEEE). que es un entero del intervalo −1022 ≤ n ≤ 1023 (n´otese que 210 = 1024). 2 2 2 Es decir. donde los di son todos ceros o unos. En nuestra relaci´ on con la m´ aquina usamos la base 10. . f en base 2 tendr´ıa la forma decimal siguiente: f = 0′ d1 d2 d3 · · · d52 . Un n´ umero x no nulo para la m´aquina tiene la forma punto flotante x = ±(1 + f ) · 2n (0 ≤ f < 1). Vamos a referirnos a la de doble precisi´on usada por Matlab. donde f se denomina mantisa y n (exponente). f debe cumplir una segunda condici´on: su representaci´on binaria debe usar tan s´olo 52 bits. d52 que corresponden a la mantisa f . 1} tomadas de 52 en 52).. En el sistema decimal f es el valor de la suma d1 d2 d52 + 2 + · · · + 52 . a su vez. la mantisa f puede tomar 252 valores distintos (variaciones con repetici´on de {0. Es decir. Esta puede ser de simple o doble precisi´on. que en binario se expresa con 11 d´ıgitos) y los 52 restantes son d1 ..1) que puede ser almacenado en memoria como una cadena de 64 bits: el primer bit es 0 o 1. la m´aquina escribe x en la forma ±(1 + d1 d2 d52 + 2 + · · · + 52 ) · 2n .2. es decir. 2 2 2 (2. los 11 siguientes corresponden a la expresi´on en binario de n+1023 ( n+1023 es un n´ umero natural comprendido entre 1 y 2047. seg´ un x sea positivo o negativo. la m´ aquina 6 . Por ello.

´estos se reemplazan por otros (muy cercanos) que s´ı pueden ser escritos en la forma punto flotante. x = 1/2 se expresa en forma punto flotante como (1 + 0) · 2−1 . 2. la forma punto flotante ser´ıa x = +(1 + 0′ 1112) ) · 20 . de hecho. Ejemplos 2. La mantisa es f = 0 y el exponente n = −1. El error de redondeo 264 es la cantidad total de n´ umeros que se pueden expresar en la forma punto flotante anterior. x se escribe en base 2 en la forma 1′ 1112) . Se demuestra que el redondeo de un n´ umero tiene entre 15 y 16 cifras significativas exactas (en el sistema decimal). Ahora bien. Sea x = 1 + 12 + 14 + 81 . Este hecho se conoce con el nombre de redondeo y el error que se comete error de redondeo.1) que permite su almacenamiento como una cadena de 64 bits.nos muestra los resultados en el mismo sistema. para manejar n´ umeros que no pueden expresarse de esta forma. Por ello.1.2. tanto como variaciones con repetici´on de dos elementos (0 y 1) tomados de 64 en 64. mientras que el conjunto de los n´ umeros reales es infinito. 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. Por tanto.3. Como x = 20 + 2−1 + 2−2 + 2−3 . 7 . 2. los 11 siguientes corresponden a la expresi´on en binario de n + 1023 = 0 + 1023. el conjunto de todos los n´ umeros en punto flotante es finito. 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. Por tanto. 1.

Ejemplo 2. se convierte en uno de los extremos.2251e − 308. obtenemos a = 2. La distancia entre 1 y el primer n´ umero punto flotante m´as grande que 1 se denota por eps y se denomina el epsilon de la m´aquina.797e + 308. el resultado es un n´ umero excepcional que se denota por inf (infinito) y se detienen los c´alculos. Estos n´ umeros est´an igualmente espaciados y se escriben en la forma (1 + f ) · 2n (0 ≤ f < 1). denotamos por r(x) (valor redondeado de x) el valor aproximado con que trabaja la m´aquina. Si calculamos con Matlab el valor de la expresi´on a = 1 − 3(4/3−1).3. dicho resultado se toma como 0 y contin´ uan los c´alculos (underflow). al ser redondeado. si el resultado de una operaci´on es un n´ umero superior a realmax. por lo que acabamos de ver. El menor n´ umero m´aquina positivo se obtiene tomando f = 0 y n = −1022. Todo n´ umero del intervalo (1. Es importante notar que entre cada dos potencias consecutivas. En Matlab se denomina realmin y su valor es (1 + 0) · 2−1022 = 2−1022 = 2. Cuando el resultado de una operaci´on produce un n´ umero inferior a realmin. 8 . pongamos n 2 y 2n+1 . Dado un n´ umero x ∈ [1. Por ello. el siguiente es x = (1 + 2−52 ) · 20 = 1 + 2−52 . El mayor n´ umero m´aquina positivo se obtiene tomando f = (1/2) + 2 (1/2 ) + · · · + (1/252 ) y n = 1023. en lugar de 0. es menor o igual que eps/2 = 2−53 . Por tanto. Por el contrario. 1 + eps).22046−016.2204e − 016. Si este es el caso. El error de redondeo se produce al hacer la divisi´on 4/3 (esta divisi´on ser´ıa exacta en un computador que usara la base 3). hay la misma cantidad de n´ umeros en punto flotante: 252 . Todos los n´ umeros positivos que se pueden expresar en la forma punto flotante est´an comprendidos entre realmin y realmax.1. overflow). eps = 2−52 = 2. se produce lo que se denomina un desbordamiento (en ingl´es. Entonces ea = |x − r(x)| es el error absoluto de redondeo que. (1+0)·20 es 1 en la forma punto flotante. En Matlab este n´ umero se llama realmax y su valor es 1. 2].

la mantisa f puede tomar 252 valores distintos. si se quiere mantener la precisi´on de 15 o 16 decimales. En efecto. se deben evitar las operaciones con n´ umeros grandes. El primer n´ umero en punto flotante que es mayor que (1+0)·2n = 2n es (1 + 2−52 ) · 2n . la distancia entre ambos es 2−52+n . 2n+1 ]. dividiendo por un factor adecuado (este hecho se denomina normalizaci´on del problema). si x ∈ [2n . el error relativo er = |(x − r(x)/x| es menor o igual que −53 2 cualquiera que sea x. Aunque el error absoluto de redondeo ea = |x − r(x)| aumenta con el tama˜ no de x. para los x ∈ [2n . Por tanto.Recu´erdese que en la expresi´on anterior. es menor o igual que 2−53+n . Por ello. Entonces el error absoluto de redondeo ea . 2n+1 ]. Esto prueba que el error absoluto de redondeo aumenta con n. se tiene .

.

er = .

2−53+n x − r(x) .

.

ea .

siendo y un n´ umero peque˜ no. supongamos que y = 2−k . Si r(x) = (1 + f ) · 2n . 1) Vamos a ver c´omo se multiplica el error de redondeo cuando se realiza una divisi´on por un n´ umero muy peque˜ no. Si realizamos la divisi´on x/y con una computadora. 9 . n x x 2 Si el resultado de un c´alculo intermedio est´a afectado de un error de redondeo. produciendo lo que se denomina propagaci´ on del error. 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. Para terminar. siendo k un n´ umero natural grande. Si denotamos por r(x) la representaci´on en la forma punto flotante de un n´ umero x. el error de redondeo viene dado por ϵ = |x − r(x)|. n´otese que r(x/2−k ) = (1 + f )2n+k = r(x)/2−k . = ≤ = 2−53 . ¿cu´anto vale el error? Para facilitar el c´alculo. Un algoritmo se llama inestable cuando los errores intermedios tienen una gran influencia sobre el resultado final. este error influye en los resultados de los c´alculos posteriores en los que intervenga dicho resultado intermedio.

si n + k ≤ 1023. Entonces el error en la divisi´on x/2−k vale exactamente .

.

.

.

.

x r(x) .

|x − r(x)| − −k .

.

en el segundo caso. y despu´es realiza el producto tambi´en exacto. Con el programa de Matlab >>x=[0.0. evaluando f en puntos cada vez m´as cercanos a 0.00001. sin embargo.000001. EJERCICIOS PROPUESTOS 10 .0.0. podr´ıamos concluir que l´ımx→0 f (x) = 0 √ y.0. 0.4142. 0. 0. cero. A la vista del resultado obtenido.ˆ5 se obtiene: y = −0. Esto nos da una idea muy clara de c´omo el error de redondeo de x se multiplica gravemente al realizar una divisi´on posterior x/y con y un n´ umero muy peque˜ no. −k 2 2 2−k Luego el error en la divisi´on x/2−k es igual al producto del error en el redondeo de x por el factor 2k y recu´erdese que k es un n´ umero natural grande. Si calculamos con Matlab la expresi´on (100 − 100 + 1e − 15) · 1e + 17 se obtiene 100 (resultado correcto). 0.exp(sqrt(2)*x. al hacer su diferencia con Matlab se obtiene 0.2220.ˆ5)).0e − 15 y a continuaci´on procede a calcular la diferencia s − 100 y obtiene como resultado 0 porque ambos n´ umeros tienen la misma forma punto flotante. Por el contrario. −0. hace primero la suma s = 100 + 1. Se quiere calcular su l´ımite x5 cuando x → 0.ˆ5) .0001. por tanto. Sin embargo.0. = = 2k |x − r(x)|.1.01.4142. √ 5 5 ex −e 2x 3) Consideremos la funci´on f (x) = .001.0. y=(exp(x. si calculamos (100 + 1e − 15 − 100)·1e+17 se obtiene 0 (resultado incorrecto). −0. La diferencia tan enorme entre ambos se debe a que en el primer caso calcula el valor exacto de 100 − 100.0000001]. 2) Dos n´ umeros distintos pueden tener igual representaci´ on punto flotante y. como se obtiene f´acilmente aplicando la regla de L’Hˆopital. el l´ımite es 1 − 2./x.

1. Calcular sus ra´ıces con Matlab y comprobar que el resultado obtenido para la menor de ellas no coincide con el exacto en ninguna cifra significativa. calcular x2 . Elaborar un programa para determinar el valor del n´ umero realmax. 6. b) Si x = realmin. 3. a) Si x = realmax. calcular x2 . 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. Explicar la raz´on. 5. Expresar en la base 2 los n´ umeros: 12. Calcular con Matlab 10309 y comprobar que el resultado es infinito. 3’5. 0′ 112) y 10′ 012) . 8. Expresar en el sitema decimal los n´ umeros: 11012) . 10’25. 2. Calcular el n´ umero m´aquina inmediatamente anterior a 1. 4. 11 . Las ra´ıces de la ecuaci´on x2 −(64+10−15 )x+(64·10−15 ) = 0 son x1 = 64 y x2 = 10−15 . 25.