Está en la página 1de 7

Anlisis Numrico I

PRACTICA 1b
Nmeros de punto flotante y
errores de redondeo.
Slo hay 10 tipos de personas:
las que saben binario y las que no.

Sistemas numricos posicionales. Cotidianamente para representar los nmeros utilizamos un


sistema posicional de base 10: el sistema decimal. En
este sistema los nmeros son representados usando
diez diferentes caracteres, llamados dgitos decimales, a saber, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. La magnitud con
la que un dgito ai contribuye al valor del nmero
depende de su posicin en el nmero de manera tal
que la representacin decimal
(1)s (an an1 a1 a0 .a1 a2 )

(1) (an 10 + an1 10

n1

+ + a1 10 + a0 10 +

+a1 101 + a2 102 + . . . ),


donde s depende del signo del nmero (s = 0 si el
nmero es positivo y s = 1 si es negativo). De manera
anloga se puede concebir otros sistemas posicionales
con una base distinta de 10. En principio, cualquier
nmero natural 2 puede ser utilizado como base.
Entonces, fijada una base, todo nmero real admite
una representacin posicional en la base de la forma
(1)s (an n + an1 n1 + + a1 1 + a0 0 +
+a1 1 + a2 2 + . . . ),
donde los coeficientes ai son los dgitos en el sistema
con base , esto es, enteros positivos tales que 0
ai 1. Los coeficientes ai0 se consideran como
los dgitos de la parte entera, en tanto que los ai<0 ,
son los dgitos de la parte fraccionaria. Si, como en el
caso decimal, utilizamos un punto para separar tales
partes, el nmero es representado en la base como
(1)s (an an1 a1 a0 .a1 a2 ) ,

Ejercicio 2. Determinar la representacin binaria de


los siguientes nmeros
a) 29,

b) 0.625,

c) 0.1,

d) 5.75.

Representacin de punto flotante. Para la representacin de nmeros reales sobre un amplio rango
de valores con slo unos pocos dgitos se utiliza la
notacin cientfica. As 976 000 000 000 000 se representa como 9.76 1014 y 0.0000000000000976 como
9.76 1014 . En esta notacin el punto decimal se
mueve dinmicamente a una posicin conveniente y
se utiliza el exponente de 10 para registrar la posicin
del punto decimal. En particular, todo nmero real no
nulo puede ser escrito en forma nica en la notacin
cientfica normalizada
(1)s 0.a1 a2 a3 at at+1 at+2 10e ,

corresponde al nmero
s

Ejercicio 1. Mostrar que (13.25)10 = (1101.01)2 =


(15.2)8 = (D.4)16 .

siendo el dgito a1 6= 0. De manera anloga, todo


nmero real no nulo puede representarse en forma
nica, respecto la base , en la forma de punto flotante
normalizada:
(1)s 0.a1 a2 a3 at at+1 at+2 e ,
donde los dgitos ai respecto de la base son enteros
positivos tales que 1 a1 1, 0 ai 1 para
i = 1, 2, . . . y constituyen la parte fraccional o mantisa
del nmero, en tanto que e, el cual es un nmero
entero llamado el exponente, indica la posicin del
punto correspondiente a la base . Si m es la fraccin
decimal correspondiente a (0.a1 a2 a3 ) entonces el
nmero representado corresponde al nmero decimal
(1)s m e ,

siendo 1 m < 1.

En todo dispositivo de clculo, como una computadora o calculadora, el nmero de dgitos posibles para
representar la mantisa es finito, digamos t dgitos en
la base , y el exponente puede variar slo dentro de
un rango finito L e U (con L < 0 y U > 0). Esto
implica que slo un conjunto finito de nmeros reales
pueden ser representados, los cuales tienen la forma

(1)s 0.a1 a2 a3 at e .
donde hemos utilizado el subndice para evitar
cualquier ambigedad con la base escogida.
Tales nmeros se denominan nmeros de punto flotante con t dgitos (o de precisin t) en la base y
+ Aunque cualquier nmero natural 2 define un rango (L, U ). Al conjunto de los mismos lo denotamos
sistema posicional, en el mbito computacional slo son por F(, t, L, U ).

de inters los sistemas decimal ( = 10), binario ( = 2),


octal ( = 8) y hexadecimal ( = 16). El sistema binario + El nmero de elementos del conjunto F, esto es, la
consta slo de los dgitos 0 y 1, llamados bits (del ingls cantidad de nmeros de puntos flotantes de F, es
binary digits). Por su parte, el sistema octal usa dgitos
2( 1) t1 (U L + 1).
del 0 al 7, en tanto que el sistema hexadecimal usa los
dgitos del 0 al 9 y las letras A, B, C, D, E, F1 .
+ Debido a la normalizacin el cero no puede ser repre1 Para sistemas con base > 10 es usual reemplazar los
sentado como un nmero de punto flotante y por lo tanto
dgitos 10, 11, . . . , 1 por las letras A, B, C, . . .
est excluido del conjunto F.

Prctica 1b

Anlisis Numrico I

+
+

Implementacin en Fortran de los nmeros


de punto flotante de simple y doble precisin.
El conjunto F est acotado tanto superior como infeTodos
los compiladores Fortran admiten, al menos,
riormente:
dos clases para los tipos de datos reales: el primero,
simple precisin y, el segundo tipo, doble precisin
xmn = L1 |x| xmax = U (1 t ),
tal como se especifica en la norma IEEE754/IEC559.
donde xmn y xmax son el menor y mayor nmero de punto Para declarar el tipo de clase de una variable real se
utiliza la siguiente sintaxis:
flotante positivo representable, respectivamente.
Si x F entonces su opuesto x F.

Se sigue de lo anterior que en la recta de los nmeros


reales hay cinco regiones excluidas para los nmeros de F:
Los nmeros negativos menores que xmax , regin
denominada desbordamiento (overflow) negativo.
Los nmeros negativos mayores que xmn , denominada desbordamiento a cero (underflow) negativo.
El cero.
Los nmeros positivos menores que xmn , denominada desbordamiento a cero (underflow) positivo.
Los nmeros positivos mayores que xmax , denominada desbordamiento (overflow) positivo.

REAL(KIND=nmero de clase) :: variable

donde el nmero de clase es un nmero entero que


identifica la clase de real a utilizar. Este nmero, para
el compilador gfortran, es 4 en el caso de simple
precisin y 8 para doble precisin. Si no se especifica
la clase, entonces se utiliza la clase por omisin, la
cual es la simple precisin.

Dado que el nmero de clase es dependiente del compilador la mejor manera de especificar la clase de los tipos
+ Los nmeros de punto flotante no estn igualmente reales de manera que sea independiente del compilador y
espaciados sobre la recta real, sino que estn ms prxi- procesador utilizado consiste en seleccionar el nmero de
mos cerca del origen y ms separados a medida que nos clase a travs de las constantes con nombres REAL32 o
REAL64, para simple y doble precisin, respectivamente,
alejamos de l.
definidas por el mdulo intrnseco ISO_FORTRAN_ENV.
+ Una cantidad de gran importancia
es el denominado
Esto permite asegurar la portabilidad del programa entre
1t
epsilon de la mquina M =
el cual representa la
distintas implementaciones. Para utilizarlo, invocamos, al
distancia entre el nmero 1 y el nmero de punto flotante
comienzo del programa, el mdulo con la sentencia USE e
siguiente ms prximo.
importamos las constantes:

Con el fin de evitar la proliferacin de diversos USE iso_fortran_env, ONLY: SP=>REAL32, DP=>REAL64
...
sistemas de puntos flotantes incompatibles entre s a REAL(SP) :: variables
fines de la dcada de 1980 se desarroll la norma o REAL(DP) :: variables
estandar IEEE754/IEC5592 el cual es implementado
Aqu, por comodidad, hemos establecidos los alias SP y
en todas las computadoras actuales. Esta norma defiDP (por simple precision y double precision) para REAL32
ne dos formatos para la implementacin de nmeros y REAL64, respectivamente.
de punto flotante en la computadora:
precisin simple: F(2, 24, 125, 128),
precisin doble: F(2, 53, 1021, 1024).
Ejercicio 3. Considere el conjunto de nmeros de
punto flotante F(2, 3, 1, 2).
a) Determinar xmn , xmax , M y el nmero de elementos de F.
b) Determinar los nmeros de punto flotante positivos
del conjunto F.
c) Graficar sobre la recta real los nmeros de puntos
flotantes determinados en el punto anterior.

Constantes reales en el cdigo son declaradas de una


dada clase agregando a las mismas el guin bajo seguida
del nmero de clase. Por ejemplo:
34.0
! Real de clase por omisin
34.0_SP
! Real de clase SP
124.5678_DP ! Real de clase DP

Es importante comprender que, por ejemplo, 0.1_SP y


0.1_DP son nmeros de punto flotante distintos, siendo
el ltimo guardado internamente con un nmero mayor
de dgitos binarios.

Una manera simple y eficiente de escribir un programa que pueda ser compilado con variables reales ya sea
de una clase u otra segn se requiera, consiste en utiEjercicio 4. Determinar los valores de xmn , xmax , lizar las constantes con nombres REAL32 o REAL64,
M para la representaciones de precisin simple y del mencionado mdulo ISO_FORTRAN_ENV, para
definir la precisin de los tipos reales y luego en el
doble de la norma IEEE754.
programa invocarlo especificando el tipo de clase va
Ejercicio 5. Determinar la representacin de punto un alias como ser WP (por working precision, precisin de trabajo), la cual es utilizada para declarar los
flotante de simple precisin de
tipos de datos reales (variables y constantes). Entonces podemos escribir un programa que se compile ya
a) 5.75,
b) 118.625.
sea con reales de simple o doble precisin escogiendo
2 IEEE = Institute of Electrical and Electronics Engineeers, apropiadamente la sentencia que importa el mdulo.
IEC = International Electronical Commission.
Por ejemplo:
Prctica 1b

Anlisis Numrico I

Cdigo 1. Uso del mdulo ISO_FORTRAN_ENV para definir la precisin.


PROGRAM main
USE iso_fortran_env, ONLY: WP => REAL32
! WP => REAL64
IMPLICIT NONE
REAL(WP) :: a
a = 1.0_WP/3.0_WP
WRITE (*,*) a

al que denotaremos por f l(x). La manera usual de


proceder consiste en aplicar el redondeo simtrico a
t dgitos a la mantisa de la representacin de punto
flotante normalizada (infinita) de x. Esto es, a partir
de
x = (1)s 0.a1 a2 . . . at at+1 at+2 e ,
si el exponente e est dentro del rango L e U ,
obtenemos f l(x) como

END PROGRAM main

f l(x) = (1)s 0.a1 a2 . . . e


at e ,
Ejercicio 6. Fortran dispone de un conjunto de funciones intrnsecas para determinar las propiedades
de la representacin de punto flotante implementada en una clase de tipo real. Utilizando el siguiente
programa verifique que en una computadora personal
la clase asignada a los datos de tipo real son efectivamente los nmeros de punto flotante de precisin
simple y doble de la norma IEEE754.
Cdigo 2. Funciones intrnsecas para las propiedades
de la representacin de punto flotante.
PROGRAM machar
USE iso_fortran_env, ONLY: WP => REAL32
! WP => REAL64
IMPLICIT NONE
INTEGER :: i
REAL(WP) :: x
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)
WRITE(*,*)

'
'
'
'
'
'
'

base
t
L
U
x_max
x_min
eps_M

=
=
=
=
=
=
=

',
',
',
',
',
',
',

RADIX(i)
DIGITS(x)
MINEXPONENT(x)
MAXEXPONENT(x)
HUGE(x)
TINY(x)
EPSILON(x)

END PROGRAM machar

Cundo utilizar doble precisin?

La respuesta corta es siempre. Para las aplicaciones


cientficas la precisin de los resultados es generalmente crucial, con lo cual debe utilizarse la mejor
representacin de punto flotante disponible en la
computadora. Ntese adems que an cuando los
nmeros de punto flotante de doble precisin utilizan el doble de dgitos binarios que los de simple
precisin, en las computadoras personales (PC) el
procesador matemtico realiza internamente los
clculos con 80 bits independientemente de la precisin de los datos a ser procesados. Por lo tanto,
la diferencia de velocidad entre clculos en doble
y simple precisin en una PC es nfima.

donde
(
e
at =

at
at + 1

si at+1 < /2
si at+1 /2.

El error que resulta de reemplazar un nmero real


por su forma de punto flotante se denomina error
de redondeo. Una estimacin del mismo est dado
en el siguiente resultado: Todo nmero real x dentro
del rango de los nmeros de punto flotante puede ser
representado con un error relativo que no excede la
unidad de redondeo u:
1
|x f l(x)|
u = M .
|x|
2
Se sigue de este resultado que existe un nmero real
, que depende de x, tal que
f l(x) = x(1 + ),

siendo || u.

Ejercicio 7. Determinar la representacin de punto


flotante decimal de 5 dgitos de .
Ejercicio 8. Mostrar que en la representacin de precisin simple de la norma IEEE754 el nmero de dgitos decimales significativos es alrededor de 7, mientras
que para la precisin doble es alrededor de 16.
Aritmtica de punto flotante. Adems de dar
una representacin inexacta de los nmeros, la aritmtica realizada en la computadora no es exacta.
An si x e y son nmeros de punto flotante, el resultado de una operacin aritmtica sobre ellos no
necesariamente es un nmero de punto flotante. En
consecuencia, debe definirse una aritmtica en F que
sea lo ms semejante posible a la aritmtica de los
nmeros reales.
Si denota una operacin (suma, resta, multiplicacin o divisin) entre dos nmeros reales x e y, la
correspondiente operacin de punto flotante denotada
por } es definida como:

Redondeo de un nmero real a su representacin de punto flotante. El hecho de que slo el


x } y = f l(f l(x) f l(y))
subconjunto F de los nmeros reales es representable en una computadora implica que dado cualquier Esta aritmtica consiste en efectuar la operacin exacnmero real x, para ser representado, debe ser aproxi- ta en las representaciones de punto flotante de x e y
mado por un nmero de punto flotante de tal conjunto, y luego convertir el resultado a su representacin de
Prctica 1b

Anlisis Numrico I
punto flotante3 . En particular, si x e y son nmeros Nmeros especiales. La condicin de normalizade punto flotante, se sigue que existe un nmero real cin sobre la mantisa de los nmeros de punto flo tal que
tante impide la representacin del cero, por lo tanto
debe disponerse de una representacin separada del
x } y = (x y)(1 + ),
siendo || u.
mismo. Por otra parte, en la aritmtica de punto
flotante pueden presentarse las tres siguientes condiEjercicio 9. Utilizando aritmtica de siete dgitos ciones excepcionales: i) una operacin puede conducir
a un resultado fuera del rango representable (ya sea
decimales efectuar los siguientes clculos.
porque |x| > xmax overflow o porque |x| < xmn
a) Con a = 1234.567, b = 45.67844, c = 0.0004,
underflow), ii) el clculo puede ser una operacin
matemtica indefinida (tal como la divisin por cero)
(a + b) + c,
a + (b + c).
o iii) ser ilegal (como la divisin 0/0). Antes de la
implementacin de la norma IEEE754, frente a tales
b) Con a = 1234.567, b = 1.234567, c = 3.333333,
situaciones excepcionales, las computadoras abortaban el clculo y detenan el programa. Por el contrario,
(a + b) c,
a c + b c.
la norma IEEE754 define una aritmtica cerrada en
F introduciendo ciertos nmeros especiales. De esta
Al comparar los resultados, qu puede concluirse?
manera, con la implementacin de la norma IEEE754
en las computadoras actuales, cuando un clculo interPropiedades de la aritmtica de punto
medio conduce a una de las situaciones excepcionales
flotante
el resultado es asignado al nmero especial apropiado
No todas las propiedades de las operaciones arity los clculos continan (aritmtica de no detencin).

mticas con nmeros reales se preservan en la


aritmtica con nmeros de punto flotante. En
particular, aunque la adicin y multiplicacin de
nmeros de punto flotantes es conmutativa, no
necesariamente es asociativa ni distributiva.

Ceros. En la norma IEEE754 el cero es representado


por un nmero de punto flotante con una mantisa
nula y exponente e = L 1, pero, como ninguna condicin es impuesta sobre el signo, existen dos ceros:
+0 y 0 (con la salvedad de que en una comparacin
Ejercicio 10. Interprete el resultado del siguiente se consideran iguales en vez de 0 < +0). Un cero
programa en virtud de la representacin de punto con signo es til en determinadas situaciones, pero
en la mayora de las aplicaciones el signo del cero es
flotante de los datos reales.
invisible.
Infinitos. Cuando un clculo produce un desbordaCdigo 3. Test de igualdad entre datos reales
miento (overflow) positivo el resultado es asignado al
PROGRAM test_igualdad
nmero especial denominado infinito positivo, codiUSE iso_fortran_env, ONLY: WP => REAL64
ficado como +Infinity4 . De la misma manera, el
IF ( 19.08_WP + 2.01_wp == 21.09_WP ) THEN
WRITE(*,*) '19.08+2.01 = 21.09'
clculo de un desbordamiento negativo es asignado
ELSE
al nmero especial infinito negativo, codificado como
WRITE(*,*) '19.08+2.01 es distinto a 21.09'
-Infinity.
Los infinitos permiten considerar tamENDIF
bin el caso excepcional de la divisin de un nmero
END PROGRAM test_igualdad
no nulo por cero: el resultado es asignado al infinito
del signo apropiado. Los infinitos son representados
en el estandar por los nmeros de punto flotante con
Nmeros de punto flotante en tests de
mantisa nula y exponente e = U + 1 con el corresponigualdad
diente signo.
La comparacin x == y entre dos datos de tiNmeros denormalizados. Tradicionalmente si
po numrico testea la igualdad estricta de las
una operacin produca un valor de magnitud merepresentaciones de punto flotante de los mismos.
nor que xmn (desbordamiento a cero, o underflow),
Debido a la naturaleza inexacta de la represenel resultado era asignado a cero. Ahora bien, la distacin y los errores de redondeo involucrados en
tancia entre cero y xmn = L1 (el menor nmero de
los clculos que llevaron al valor de los datos, tal
punto flotante positivo representable) es mucho macomparacin puede dar un valor lgico falso an
yor que la distancia entre este nmero y el siguiente
cuando los datos que representan sean matemticamente iguales. Por este motivo la igualdad
por lo que la asignacin a cero de una condicin de
estricta debe ser reemplazada por un test de igualunderflow produce errores de redondeo excepcionaldad dentro de cierta tolerancia: abs(x-y) <=
mente grandes. Para cubrir esta distancia y reducir
tol donde el valor de tol depende del problema
as el efecto de desbordamiento a cero a un nivel
considerado.
comparable con el redondeo de los nmeros de pun-

3 La implementacin efectiva de estas operaciones en una


computadora no procede exactamente de esta forma pero el
resultado final se comporta como hemos indicado.

Prctica 1b

4 Ntese que infinito no significa necesariamente que el resultado sea realmente , sino que significa demasiado grande
para representar.

Anlisis Numrico I
to flotante se implementa el desbordamiento a cero
WRITE(*,*) 'Desbordamiento =', 2.0*x_max
gradual (gradual underflow) introduciendo los nmeWRITE(*,*) 'Desbordamiento gradual a cero =',&
ros de punto flotante denormalizados. Los nmeros
x_min/2.0
denormalizados son obtenidos removiendo en la reWRITE(*,*) 'Menor numero denormalizado =', &
x_min_den
presentacin de punto flotante la condicin de que
WRITE(*,*) 'Desbordamiento a cero =', &
a1 sea no nulo solo para los nmeros que corresponx_min_den/2.0
den al mnimo exponente e = L. De esta manera la
WRITE(*,*) 'Division por 0 =', 1.0/cero
unicidad de la representacin es mantenida y ahoWRITE(*,*) '0/0 =', cero/cero
WRITE(*,*) 'NaN + 1 =', cero/cero + 1.0
ra es posible disponer de nmeros de punto flotante
en el intervalo ( L1 , L1 ). La magnitud del ms
STOP
pequeo de estos nmeros denormalizados es igual
END PROGRAM excepciones
Lt
a
. De este modo, cuando el resultado de una
operacin tiene magnitud menor que xmn el mismo Ejercicio 12. Determinar los nmeros de punto floes asignado al correspondiente nmero de punto flo- tante denormalizados positivos asociados al conjunto
tante denormalizado ms prximo. En el estandar, F(2, 3, 1, 2).
los nmeros denormalizados son representados como
nmeros de punto flotante con mantisa no nula y
exponente e = L 1.
Anulando la aritmtica de no detencin
NaN.Operaciones matemticamente ilegales, como
de la norma IEEE74.
0/0 x para x < 0, son asignadas al nmero espeLa filosofa detrs de la aritmtica de no detencin
cial denominado Not a Number (no es un nmero),
de la norma IEEE754 es que el sistema de punto
codificado como NaN. En el estandar un NaN es repreflotante extendido simplifica la programacin
sentado por un nmero de punto flotante con mantisa
en algunos casos, en particular cuando los
no nula y exponente e = U + 1 (puesto que la mantisa
clculos involucran puntos singulares. Sin
no est especificada no existe un nico NaN, sino un
embargo, muchos usuarios la encuentran confusa
conjunto finito de ellos los cuales pueden utilizarse
y prefieren que los clculos sean abortados con
para especificar situaciones de excepcin particulaun apropiado mensaje de error. Para anular el
res).
comportamiento del estandar en las situacio-

Las operaciones aritmticas que involucran a los nmeros especiales estn definidas de manera de obtener
resultados razonables, tales como
(Infinity ) + (+1) = Infinity
(Infinity ) (1) = Infinity
(Infinity ) + (Infinity ) = Infinity
(Infinity ) + (Infinity ) = NaN
1/(0) = Infinity 1/(Infinity ) = 0
0/0 = NaN
(Infinity )/(Infinity ) = NaN
0 (Infinity ) = NaN

nes excepcionales se puede utilizar la opcin


-ffpe-trap=invalid,zero,overflow,
underflow,denormal en la compilacin del
programa con el compilador gfortran.

Propagacin del error de redondeo. Un punto


de mucha importancia para el anlisis numrico es
analizar la forma en que un error de redondeo introducido en algn punto de un clculo se propaga en los
clculos posteriores. Los siguientes ejercicios ilustran
los problemas que pueden ocurrir al trabajar con una
representacin finita de los nmeros reales.

Por otra parte un NaN se propaga agresivamente a


travs de las operaciones aritmticas: en cualquier Ejercicio 13. Considere la suma de cuatro nmeros
operacin donde un NaN participe como operando el positivos:
y = x1 + x2 + x3 + x4 .
resultado ser un NaN.
a) Mostrar que si los xi son nmeros de punto flotante,
en una aritmtica de t dgitos, el error de redondeo
Ejercicio 11. Compilar y ejecutar el siguiente proen y est acotado por
grama para mostrar la accin de los nmeros especiales.
|y| (3x1 + 3x2 + 2x3 + x4 ) u.
Cdigo 4. Nmeros especiales.
PROGRAM excepciones
IMPLICIT NONE
INTEGER :: i
REAL :: x,x_max,x_min,x_min_den,cero
x_max = HUGE(x)
x_min = TINY(x)
x_min_den = REAL(RADIX(i))**(MINEXPONENT(x) &
- DIGITS(x))
cero = 0.0

Prctica 1b

b) Mostrar que el error de redondeo se minimiza reacomodando los nmeros a sumar de manera que los
ms pequeos sean los que se sumen primero.
Ejercicio 14. Implementar un programa Fortran para evaluar la suma (en precisin simple)
10 000
X000

1/n,

n=1

Anlisis Numrico I
primero en el orden usual y luego en el orden opuesto.
Explique las diferencias obtenidas e indique cual es
el resultado ms preciso.
Ejercicio 15. Supngase que x e y son nmeros positivos correctamente redondeados a t dgitos. Mostrar
que la magnitud del error relativo de redondeo en
z = x y est acotada por
z |x| + |y|


u + u.


z
|x y|
Mostrar, entonces, que si x e y son aproximadamente iguales, los errores de redondeo de x e y pueden
propagarse de manera tal que el error relativo en z
puede ser grande aunque el error absoluto sea pequeo
(fenmeno de cancelacin de dgitos significativos).

Lista de recomendaciones para minimizar


el impacto del error de redondeo.
Evitar testear la igualdad entre dos nmeros, en su lugar testear la magnitud de la
diferencia dentro de cierta tolerancia.
Cuando se van a sumar y/o restar nmeros,
considerar siempre los nmeros ms pequeos primero.
De ser posible evitar la sustraccin de dos nmeros aproximadamente iguales. Una expresin que contenga dicha sustraccin puede
a menudo ser reescrita para evitarla.
Minimizar el nmero de operaciones aritmticas.

El siguiente ejercicio muestra que la prdida de preInestabilidad numrica Los ejercicios anteriores
cisin en la resta de dos nmeros aproximadamente
ilustran un resultado importante: algoritmos matemiguales puede tener un efecto drstico en expresiones
ticamente equivalentes no necesariamente son numque contengan dicha sustraccin.
ricamente equivalentes. Por equivalencia matemtica
Ejercicio 16. La frmula cuadrtica nos dice que las de dos algoritmos queremos decir que los algoritmos
dan los mismos resultados para los mismos datos de
races de ax2 + bx + c = 0 son
entrada suponiendo que los clculos son realizados sin

errores de redondeo. En tal caso un algoritmo puede


b + b2 4ac
b b2 4ac
x1 =
,
x2 =
.
ser derivado uno del otro con ayuda de las reglas del
2a
2a
lgebra e identidades matemticas. Dos algoritmos se
Si b2  4ac entonces, cuando b > 0 el clculo de x1 dicen numricamente equivalentes si sus resultados
involucra en el numerador la sustraccin de dos nme- respectivos, usando los mismos datos de entrada, no
ros casi iguales, mientras que si b < 0 esta situacin difieren ms de lo que los datos de salida exactos del
ocurre para el clculo de x2 . Racionalizando el nume- problema cambiaran si los datos de entrada fueran
rador se obtienen las siguientes frmulas alternativas modificados en unas pocas unidades de la unidad de
que no sufren de este problema:
redondeo u. Ms an, los ejemplos muestran que los
errores de redondeo en los clculos involucrados en
2c
2c

,
x2 =
,
x1 =
un algoritmo pueden producir prdida de precisin
b + b2 4ac
b + b2 4ac
en los resultados e incluso destruir completamente
siendo la primera adecuada cuando b > 0 y la segunda el resultado exacto (fenmeno denominado inestabilidad numrica). A la luz de una aproximacin del
cuando b < 0.
anlisis del error, conocida como anlisis inverso del
Utilizar la frmula usual y la racionalizada para error, se puede mostrar que los resultados que un
calcular las races de
algoritmo produce bajo la influencia de los errores de
redondeo, son el resultado exacto de un problema del
2
x + 62.10x + 1 = 0,
mismo tipo en el cual los datos de entrada estn perutilizando aritmtica a cuatro dgitos. Interprete sus turbados por cantidades de cierta magnitud. De esta
forma transferimos el problema de estimar los efectos
resultados.
del redondeo durante los clculos de un algoritmo,
Ejercicio 17. Considere el polinomio
al problema de estimar los efectos de perturbar los
datos de entrada. Esto permite, entonces, establecer
p(x) = x3 6x2 + 3x 0.149,
la siguiente definicin:
a) Evalue el polinomio en x = 4.71 utilizando aritmtica decimal de tres dgitos. Estime el error relativo
cometido.
b) Repita el punto anterior pero con el polinomio
escrito en su forma anidada
p(x) = ((x 6)x + 3)x 0.149.

Un algoritmo se dice numricamente estable si pequeos cambios en los datos iniciales, de magnitudes
(relativas) del orden de la unidad de redondeo u,
producen en correspondencia pequeos cambios en
los resultados finales. De lo contrario, se dice que el
algoritmo es numricamente inestable.

c) A qu se debe el decrecimiento del error en el Ntese que algunos algoritmos son estables para cierto
segundo caso?
grupo de datos iniciales pero no para todos. Adems
Prctica 1b

Anlisis Numrico I
algunos problemas son numricamente inestables independientemente de la eleccin del algoritmo. En este
caso se dice que el problema est mal condicionado o
que sta mal planteado.
Ejercicio 18. Considere el problema de calcular las
integrales
Z 1
In =
xn exp (x 1) dx, para n = 1, 2, . . .
0

Es claro de la definicin que I1 > I2 > . . . > In1 >


In > . . . > 0.
a) La integracin por partes proporciona el siguiente
procedimiento recursivo para la evaluacin (verificarlo!):
(
I1 = e1 ,
In = 1 nIn1 n 2.
Usando aritmtica de simple precisin calcular los
primeros n = 20 valores de In . Tienen sentido
los resultados obtenidos? Analice la estabilidad
numrica del proceso iterativo suponiendo que se
comienza con un valor perturbado I1 = I1 + de
I1 .
b) Considere ahora la frmula recursiva escrita en
forma inversa, junto con la (cruda) aproximacin
I20 = 0:

I20 = 0,
1 In
In1 =
n = 20, 19, . . . , 2.
n
Estime los primeros n = 20 valores de In con dicho
algoritmo. Tienen sentido los resultados obtenidos? Analice la estabilidad numrica del algoritmo.
Ejercicio 19. Implementar un programa para generar los primeros n + 1 trminos de la sucesin dada
por la ecuacin de diferencias:
xk+1 = 2.25 xk 0.5 xk1

k = 1, 2, . . .

con los valores iniciales


x0 =

1
,
3

x1 =

1
.
12

Tomar n = 60 en doble precisin y confeccionar un


grfico semilogartmico de los valores obtenidos como
funcin de k. La solucin exacta de la ecuacin de
diferencias es
 k
1 1
xk =
k = 0, 1, 2, . . .
3 4
la cual decrece montonamente conforme k se incrementa. Analice y explique los resultados obtenidos.
Ayuda: Encuentre la solucin general de la ecuacin
de diferencias.

Prctica 1b

También podría gustarte