En una reuni´on se plantea la siguiente pregunta: “¿Cu´anto vale π?”
El ingeniero dice: “Es aproximadamente 3 y 1/7.” El f´ısico responde: “Es 3.141592.”
El matem´atico piensa un momento, y replica: “Es igual a π.”
(Del folklore) Hemos mostrado la posibilidad te´orica de representar los n´umeros reales mediante sucesiones de d´ıgitos en distintas bases. Ahora vamos a enfrentarnos con su representaci´on pr´actica en un orde- nador, con las limitaciones efectivas que la realidad impone.
6.2.1. N´umeros de m´aquina
El conjunto de los n´umeros reales no puede representarse plenamente en un ordenador (¡ni siquiera el de los n´umeros enteros!). Si queremos guardar las cifras decimales (o m´as frecuentemente, binarias) de un n´umero en un ordenador, s´olo disponemos de un n´umero finito de ‘huecos’ para hacerlo. Podemos, simplemente, ignorar las cifras del desarrollo a partir de un cierto lugar; pero se aprovecha mejor el espacio evitando “ceros innecesarios” como en la ‘notaci´on cient´ıfica’, con una representaci´on en punto flotante:
n´umero = signo × mantisa × baseexponente
Por ejemplo, para la constante de gravitaci´on universal G = 6.673 × 10−11, la mantisa es 6.673, la base es 10 y el exponente −11.
Este y otros ejemplos de magnitudes muy grandes o muy peque˜nas, como
Masa del electr´on 9.109 × 10−28 g.
Masa del sol 1.989 × 1030 kg.
Constante de Plank 6.626 × 10−34 J·s N´umero de Avogadro 6.022 × 1023 mol−1 ponen de manifiesto el ahorro de cifras que conlleva esta notaci´on.
Pero cada n´umero admite infinitas representaciones de este tipo:
−111/2 = −55.5 × 100= −5.55 × 101 = −0.555 × 102 = . . ., o tambi´en −111/2 = −555 × 10−1 = −5550 × 10−2= . . .
Para tener unicidad hace falta normalizar la representaci´on. Habitualmente, como hemos hecho en los ejemplos de notaci´on cient´ıfica,
el primer d´ıgito no nulo de la mantisa aparece a la izquierda del punto, la parte entera del valor absoluto consta de una sola cifra: −111/2 = −5.55 × 101.
Esto excluye el n´umero 0, que queda como excepci´on, y ha de ser representado aparte. En matem´aticas es tambi´en frecuente otra normalizaci´on,
colocando la primera cifra no nula inmediatamente despu´es del punto; el valor absoluto de la mantisa es siempre menor o igual que 1 y su parte entera es nula:
−111/2 = −0.555 × 102.
La diferencia entre ambas normalizaciones es inesencial: todo se reduce a sumar o restar 1 al exponente. Lo importante es que el punto decimal flota para eliminar los ceros ‘innecesarios’:
La normalizaci´on ahorra espacio: Si se emplea base 2 en vez de base 10, como todas las mantisas comenzar´an por hh1. etc.ii, podemos sobreentender no s´olo el punto, sino tambi´en el 1 (‘t´ecnica del bit fantasma’). En la segunda normalizaci´on, todas las mantisas —en cualquier base— van a comenzar porhh0. etc.ii, lo que hace innecesario explicitar el 0 y el punto.
Finalmente, el tama˜no de las palabras del ordenador fuerza a limitar:
la precisi´on, la cantidad p de d´ıgitos disponibles para colocar en ellos la mantisa;
la cantidad p0 de d´ıgitos disponibles para el exponente, que estar´a por tanto comprendido entre un valor m´ınimo y un valor m´aximo.
Con tales condicionantes, fijada una base β, los n´umeros de m´aquina , verdaderamente dis- ponibles en el ordenador, ser´an
y = ±βE d1+ d2 β + d3 β2 + · · · + dp βp−1 ,
donde cada d´ıgito dk satisface 0 ≤ dk ≤ β − 1 y d1 6= 0, y el exponente E toma sus valores entre un m´ınimo Emin y un m´aximo Emax.
Paralelamente, con la segunda normalizaci´on obtendr´ıamos
y = ±βe d1 β + d2 β2 + · · · + dp βp ,
con 0 ≤ dk ≤ β − 1 y d1 6= 0, y emin ≤ e ≤ emax. Se pasa de una a otra, por tanto, tomando e = E + 1. Ambas son equivalentes, en el sentido de que generan exactamente los mismos n´umeros (con la relaci´on se˜nalada entre los exponentes, y con Emin= emin− 1, Emax= emax− 1).
A´un as´ı:
— hay multitud de implementaciones posibles — cada fabricante elige la que mejor le parece
— esto dificulta enormemente la transportabilidad de los programas de c´alculo. Para unificar, se han propuesto diversas estandarizaciones:
norma IEEE 754(completada con laIEEE 854); denominada tambi´en IEC 559. Es la m´as utilizada. Hay en la red ‘applets’ que muestran el formato archivado por el ordenador ([2]). La normalizaci´on elegida para la mantisa (denominada significando en esta norma) es la primera, d1.d2. . . dp, con β = 2 o β = 10 como bases permitidas.
norma ISO/IEC 10967-1 Language Independent Aritmetic, Part 1 [LIA-1], posterior y menos
restrictiva. Usa la segunda normalizaci´on 0.d1d2. . . dp para la mantisa (denominada ahora fracci´on), y admite cualquier base β que sea un n´umero natural par.
Sistemas num´ericos en punto flotante
Para analizar las dificultades y la complejidad de la representaci´on y manejo en el ordenador de n´umeros en punto flotante, se establecen ‘modelos ideales’, que sean ‘simples pero realistas’. Siguiendo a Higham (v. [Hig] §2.1, pp. 40 y ss.), usaremos lo que ´el denomina sistemas num´ericos
en punto flotante.
Previamente, notemos: cuando escribimos
y = ±βe d1 β + d2 β2 + · · · + dp βp , la fracci´on f = d1 β + d2 β2 + · · · + dp
βp se puede representar tambi´en como m × β
−p, donde m es un entero de p d´ıgitos del intervalo [βp−1, βp− 1]; concretamente m = d1βp−1+ d2βp−2+ · · · + dp. As´ı
Por ser la notaci´on m´as c´omoda, ´esta es la forma de los valores que vamos a usar para definir los sistemas num´ericos en punto flotante.
Definici´on 6.2.1. Un sistema num´erico en punto flotante es un subconjunto finito de R, F = F (β, p, emin, emax), caracterizado por cuatro par´ametros enteros:
• β ∈ Z (la base o radix de F ) • p ∈ Z (la precisi´on de F )
• emin ∈ Z (el menor exponente de F ) • emax∈ Z (el mayor exponente de F )
Dados valores espec´ıficos de β, p, emin, emax, se define
FN = {y = ±m × βe−p : m, e ∈ Z, βp−1≤ m ≤ βp− 1, emin≤ e ≤ emax},
y finalmente
F = {0} ∪ FN El mayor y el menor n´umero positivo de F son
f max := m´ax{y ∈ F : y > 0} = βemax(1 − β−p)
f minN := m´ın{y ∈ FN : y > 0} = βemin−1
Llamaremos rango de F al conjunto [−f max, −f minN] ∪ {0} ∪ [f minN, f max] (que contiene a F estrictamente).
N´otese que ahora la mantisa m de un n´umero y = 0.d1d2. . . dp × βe de FN es el entero d1d2. . . dp (escritos en base β).
Llamaremos a d1 eld´ıgito m´as significativo y a dp el d´ıgito menos significativo de y.
En la norma LIA-1, los par´ametros β y p han de satisfacer
β ≥ 2 y p ≥ 2,
y β tiene que ser par.
As´ı mismo, “para que haya bastantes elementos en F ”, los par´ametros emin, emax y p han de satisfacer
p − 2 ≤ −emin ≤ βp− 1, p ≤ emax≤ βp− 1.
En IEEE 754 y 854 se consideran cuatro formatos distintos: precisi´on simple, precisi´on doble, precisi´on simple extendida, precisi´on doble extendida, con valores para los par´ametros (ver [Hig],
p. 41):
formato β p emin emax
IEEE simple 2 24 −125 128
IEEE doble 2 53 −1021 1024
IEEE simple extendida 2 ≥ 32 ≤ −1021 ≥ 1024 IEEE doble extendida 2 ≥ 64 ≤ −16381 ≥ 16384
Ejemplos
1.- Si β = 2, p = 5 [= 22 + 1], y = 11/2 = 22+ 1 + 1/2 = 23(2−1+ 2−3+ 2−4), tendr´ıamos (con mantisa y exponente en base 2, escrito el cero como O y el uno como I para distinguir) y = O.IOIIO × 2II = IOIIO × 2II−IOI; la mantisa m es IOIIO y el exponente e es II.
2.- ‘Minimodelo’ con β = 2, p = 3, emin= −1, emax= 3. Los n´umeros no negativos de F ser´ıan (en escritura decimal) el 0 y fracci´on 1/2 1/2 + 1/8 1/2 + 1/4 1/2 + 1/4 + 1/8 exponente 0.25 0.3125 0.3750 0.4375 × 2−1 0.5 0.625 0.750 0.875 × 20 1.0 1.25 1.50 1.75 × 21 2.0 2.5 3.0 3.5 × 22 4.0 5.0 6.0 7.0 × 23
que se distribuyen gr´aficamente as´ı:
0 0.25 0.5 1.0 2.0 3.0 4.0 5.0 6.0 7.0
Junto con sus opuestos (los sim´etricos respecto del origen) forman el sistema F = F (2, 3, −1, 3). Este ejemplo ilustra c´omo el espaciado de los n´umeros de F salta un factor 2 (= β) con cada potencia de 2 (= β).
6.2.2. Aproximaci´on por redondeo
Elegido un determinado sistema num´erico en punto flotante para implementar en el ordenador, el resto de los n´umeros reales (¡casi todos!) no existen para ´el. Esta situaci´on no es nueva en absoluto: cada vez que hemos usado un valor num´erico de π, hemos puesto π = 3.14, o π = 3.1416, o π = 3.141592654 (cuando disponemos de calculadora); no hemos podido manejar su ‘valor exacto’, que, como dec´ıa el matem´atico, ‘es π’. La realidad fuerza inevitablemente a tomar aproximaciones, por lo que, si no podemos evitar los errores que generan, tratemos al menos de minimizarlos.
Eso hacemos cuando ponemos π = 3.1416 (aproximaci´on por exceso) y no π = 3.1415 (aproxi- maci´on por defecto o por corte): tomamos el valor m´as pr´oximo a π entre los que tienen cinco cifras decimales.
Para simplificar(*), definiremos:
Definici´on 6.2.2 (Redondeo y desbordamiento.). Dado F = F (β, p, emin, emax), elredondeo ( respecto de F ) es la aplicaci´on f l : R → F ∪ {overflow, underflow} dada por
f l(x) = overflow si |x| > f max = m´ax F (hay un desbordamiento por exceso)
f l(x) = underflow si 0 < |x| < f minN = m´ın{|y| : y ∈ F, y 6= 0} (hay un desbordamiento por defecto).
f l(x) = elemento de F m´as pr´oximo a x si x est´a en el rango de F .
Cuando haya dos n´umeros en F a la misma distancia de x, convendremos en tomar como f l(x) el que tenga el ´ultimo d´ıgito dp par.
(*)
La norma IEEE 754 contempla distintos modos de redondeo: redondeo hacia +∞ (round down), redondeo hacia −∞ (round up), redondeo hacia 0 (round towards zero) y redondeo al m´as pr´oximo (round to nearest ). Ver [Gold]
Ejercicio. Para x, y en el rango de F , (i) x ≤ y implica f l(x) ≤ f l(y); (ii) f l(−x) = − f l(x);
(iii) f l(βn· x) = βn· f l(x) (supuesto βn· x en el rango de F ).
Ejemplos. (1) En nuestro ‘minimodelo’ con β = 2, p = 3, emin = −1, emax = 3, se produce desbordamiento por exceso siempre que |x| > 7, y por defecto si 0 < |x| < 0.25.
underflow overflow
0 0.25 0.5 1.0 2.0 3.0 4.0 5.0 6.0 7.0
Para x = 4.5, ser´ıa f l(x) = 4; para x = 5.5, ser´ıa f l(x) = 6 (¿por qu´e?). (2) Para β = 10, p = 6:
a = 0.31415926525 . . . × 101 f l(a) = 0.314159 × 101 b = −0.81412781 f l(b) = −0.814128 × 100 c = 0.112399972 f l(c) = 0.124000 × 100 d = 0.999999721 f l(d) = 0.100000 × 101
Obs´ervese c´omo el ´ultimo d´ıgito de la mantisa de b ha sido modificado. El cambio puede afectar incluso a varios d´ıgitos (como en c) y a veces hasta al exponente, como en el ejemplo d.
Medidas del error de redondeo
Al redondear un n´umero, es decir, al sustituir un x ∈ R por f l(x) como valor aproximado, cometemos un error cuyo tama˜no conviene saber controlar. Puesto que cada x en el rango de F que no pertenezca a F estar´a en un intervalo (y1, y2) con extremos en F y uno s´olo, y f l(x) ser´a precisamente uno de esos extremos,
y1 —————————————— y2
x
el valor de | f l(x) − x| = m´ın{|x − y| : y ∈ F } ser´a, en el peor de los casos, la mitad de la longitud y2− y1 del intervalo. Basta, por tanto, controlar el espaciado entre los n´umeros de F . En general, se observa que el espaciado es uniforme entre potencias consecutivas de β, y que se multiplica por β al saltar a una nueva potencia de β.
Para concretar m´as, se utiliza el ´epsilon de la m´aquina, que es la distancia M desde 1.0 al siguiente n´umero de F m´as grande que ´el. Por tanto,
Definici´on 6.2.3. ´Epsilon de la m´aquina . Para un sistema num´erico en punto flotante F = F (β, p, emin, emax), el´epsilon de la m´aquina es el n´umero
M = β1−p,
Por tanto, M es el espaciado de los n´umeros en punto flotante entre 1.0 y β, mientras que el espaciado de los n´umeros entre 1.0 y 1/β es β−p= M/β. En general,
Lema 6.2.4. La distancia entre un n´umero en punto flotante normalizado y y otro n´umero en punto flotante normalizado adyacente a y es como m´ınimo β−1M|y| y como m´aximo M|y| (salvo que uno de ellos sea cero).
Pero seg´un dice [Hig], ‘la cantidad m´as ´util asociada con F , que est´a por todas partes en el
mundo del an´alisis de los errores de redondeo’, es la llamada unidad de redondeo, que no es otra cosa que la mitad del ´epsilon de la m´aquina.
Definici´on 6.2.5. Dado un sistema num´erico en punto flotante F = F (β, p, emin, emax), el n´umero u = 1
2β
1−p= 1
2M se llama unidad de redondeo del sistema F .
En el est´andar IEEE con simple precisi´on se tiene u = 2−24≈ 5.96 × 10−8; en doble precisi´on, u = 2−53≈ 1.11 × 10−16.
A partir del lema anterior, se obtiene:
Proposici´on 6.2.6. Si x ∈ R est´a en el rango de F , entonces
| f l(x) − x| ≤ u |x| = 1 2β 1−p|x|; precisando m´as, f l(x) = x(1 + δ), |δ| < u = 1 2β 1−p.
Demostraci´on. Ver [Hig], p. 42, Th. 2.2.
Esta proposici´on nos da cotas superiores del error absoluto y del error relativo en la aproxima- ci´on de x por f l(x). Recordamos la definici´on de estos conceptos.
Definici´on 6.2.7. Sea x un n´umero real. Six es otro n´e umero real, que tomamos como una aproxi- maci´on de x, se llama error absoluto (de la aproximaci´on) a la diferencia
Ea(x) = |x −x|,e
y error relativo (cuando x 6= 0) al cociente
Er(x) = Ea(x) |x| = |x −x|e |x| = 1 −xe x = e x x − 1 .
As´ıx = x + α con |α| = Ee a(x); y para x 6= 0,x = x(1 + ρ) con |ρ| = Ee r(x).
La proposici´on 6.2.6 significa, por tanto, que el error relativo del redondeo es siempre estricta- mente menor que la unidad de redondeo.
Nota. En algunos textos, el error se expresa en t´erminos de la unidad en el ´ultimo lugar, que se define para un y ∈ F por
ulp(y) = ulp(±0.d1d2. . . dp× βe) = 0.00 . . . 01 × βe= βe−p
(ulp: unity in the last place). As´ı, por ejemplo, si F corresponde a β = 10 y p = 3, y se redondea .0314159 a .314 × 10−1, entonces hay un error de .159 unidades en el ´ultimo lugar. Dada la distri- buci´on de los elementos de F , es preferible usar el error relativo, m´as preciso; mientras que para x = 0.9994999999 tendr´ıamos f l(x) = 0.999 × 100, con ulp(f l(x)) = 10−3 y un error de 0.4999999 ulp ≈ 0.5 ulp, el error relativo es 0.0005002502252 ≈ 0.1u, y sin embargo para x = 1.005 ser´ıa f l(x) = 0.100 × 101, con ulp(f l(x)) = 10−2, un error de 0.5 ulp igualmente, pero el error relativo correspondiente ser´ıa 0.004975124378 ≈ u, aproximadamente diez veces mayor que el anterior (este es el fen´omeno llamado wobbling precision, ‘precisi´on bamboleante’ u ‘oscilante’).