Os números máquina

Os ordenadores tan só usan un subconxunto finito dos números reais, os chamados números máquina ou números de punto flotante; son números da forma

\displaystyle \pm m\times b^{\displaystyle\pm e}

onde

  • a base b, nos ordenadores binarios, é 2;
  • a mantisa m é un número entre 0 e 1 con n cifras significativas (é  dicir, m = 0,d_1\ldots d_n con 0\leq d_i<b-1 e d_1 \neq 0, agás para o cero);
  • o expoñente e é un enteiro limitado (|e|<M, M prefixado).

Todo número real x aproxímase nun ordenador por un número máquina próximo, que chamaremos fl(x). Boa parte das linguaxes de computación usan o estándar IEEE 754 para aritmética de punto flotante. En particular, gardan os números máquina co formato binary64, que reserva 52 bits para a mantisa, 10 bits para o expoñente e 2 bits para os respectivos signos. Eso significa que o numero de cifras binarias significativas é 52, polo que o número de cifras decimais significativas é de 15,9.

Exercicio: En Sage o obxecto float_info do paquete sys permite coñecer as características dos número máquina (carga o paquete con import sys se non o atopa).

  1. Obtén o valor do maior e menor positivo número máquina no formato binary64, mostrando as constantes sys.float_info.maxsys.float_info.min, respectivamente. Debes ter en conta que Sage pode traballar con números maiores que sys.float_info.max usando números denormalizados, pois crea variables do tipo sage.rings.real_mpfr.RealNumber, mais ten un custe en tempo de cálculo.
  2. Calcula 0*NaN e 1/Infinity para ver un uso das indeterminacións e do infinito en Sage.

O erro de redondeo unitario

O número máquina fl(x) próximo a x, adoita escollerse por unha destas vías:

  • truncando, é dicir, eliminado as cifras decimais significativas de x máis aló da n-ésima;
  • redondeando, escollendo o máis cercano entre o anterior e o resultado de  sumarlle 1 na cifra n-ésima.

Así, se x=0,d_1d_2\ldots d_nd_{n+1} \ldots\times 2^{\displaystyle e}, supoñendo e válido,

  • o seu truncamento a n cifras significativas é 0,d_1d_2\ldots d_n \times 2^{\displaystyle e} e
  • mentres que o redondeo é o máis próximo entre o anterior e (0,d_1d_2\ldots d_n + 2^{-n})\times 2^{\displaystyle e}.

Por definición, o erro de redondeo é menor ou igual que o de truncamento. Ademais, calculando fl(x) por redondeo, cúmprese que

\displaystyle\left|\frac{x-fl(x)}x\right|\leq 2^{\displaystyle -n}.

O valor \varepsilon = 2^{\displaystyle -n} chámase erro de redondeo unitario ou épsilon.

Exercicio: Acha o valor do épsilon en Sage vendo a constante RDF.epsilon. Comproba que se axusta á definición do épsilon, tendo en conta que n=52 no estándar IEEE 754.

Exercicio: Redondea o número \pi a 5 ou 6 cifras decimais significativas usando o comando pi.n(digits=5).

O erro nas operacións básicas

O épsilon tamén serve de cota para o erro que aparece nas operacións básicas: se x e y son números máquina, daquela

\left|\frac{\displaystyle x\odot y -fl(x\odot y)}{\displaystyle x\odot y}\right|\leq \varepsilon,

onde \odot representa calquera das catro operacións básicas. É dicir, cando facemos un cálculo nun ordenador, non podemos esperar que o resultado sexa exacto; haberá, como pouco, un erro da orde de épsilon. Por exemplo, se comprobamos en Sage se exp(log(10.))==10. veremos que non é certo.

O caso anterior ilustra unha regra importante en programación: non se debe comprobar se un número en punto flotante é igual a outro (no caso anterior, se x=exp(log(10.)) é igual a 10), senón se o erro relativo é da orde de épsilon, é dicir, se

abs(x-10) <= 10*RDF.epsilon

Se o número co que comparamos é menor que 1 en valor absoluto, mírase o erro absoluto. Por exemplo, para ver se x é cero débese comprobar se abs(x) <= RDF.epsilon.

Acabamos de ver como é o erro computacional cando operamos con números máquina. Na entrada seguinte, veremos un caso no que o erro empeora respecto da mesma operación con números reais.

Advertisements
Esta entrada foi publicada en Cálculo numérico. Ligazón permanente.

One Response to Os números máquina

  1. Pingback: Unha ollada preliminar ao Cálculo Numérico | fundmat

Deixar unha resposta

introduce os teu datos ou preme nunha das iconas:

Logotipo de WordPress.com

Estás a comentar desde a túa conta de WordPress.com. Sair / Cambiar )

Twitter picture

Estás a comentar desde a túa conta de Twitter. Sair / Cambiar )

Facebook photo

Estás a comentar desde a túa conta de Facebook. Sair / Cambiar )

Google+ photo

Estás a comentar desde a túa conta de Google+. Sair / Cambiar )

Conectando a %s