Errores en punto flotante

General Comentarios desactivados

Hace poco salió la noticia de que el Microsoft Excel suspendía las matemáticas, y poco despues me encontré con que los navegadores basados en Gecko también, y sin embargo el Internet Explorer las aprobaba.

Viendo los comentarios de la gente, me entraron ganas de aclarar un poco este último tema, y a eso es a lo que dedico este post.

Como supongo que sabreis, hay varias tipos de representaciones informáticas para los números (enteros con y sin signo, y reales, generalmente en punto flotante, punto fijo… entre otros)

¿Cuál es el problema? Que un número real puede tener infinitas cifras, generalmente decimales, y la memoria de un PC es limitada.

Esto es, si nos basamos en la representación en punto flotante que se usan 32 bits para guardar un número real en precisión simple, de los cuales:

  • 1 bit es para el signo (0 positivo y 1 negativo).
  • 8 bits para el exponente (almacenado en exceso a 127, es decir, sin signo y el 127 representa el cero, el 126 el menos uno…)
  • 23 bits para la mantisa

También hay que tener en cuenta la normalización de los números. Es decir, un número siempre se almacenará de la forma ±0.M x BE, siendo M la mantisa, E el exponente y B la base, que en el caso de un ordenador es 2.

Como se puede imaginar, no se pueden representar todos los números reales, por lo que se pueden adoptar distintas medidas:

  • Representación truncada: Un número se representa mediante la suma de varios, para obtener más precisión, de la forma: ±0.d1d2…dt * BE + ±0.dtdt+1... * BE-t siendo t el número de cifras de la mantisa, en nuestro caso, 23 bits.
  • Representación redondeada: Es el caso más común, y consiste en redondear el número que queremos representar al número representable más cercano (p.e. si solo pudiésemos representar enteros, el 9.3 ~> 9, y el 23.8 ~> 24).
    Esta es la representación que los ordenadores suelen usar, y si necesitan más precisión, pues se aumenta el tamaño del número. (Doble precisión = 64 bits…)

Se llama epsilon de una máquina (ε) al valor que representa la exactitud de la misma. Es decir, el menor valor que cumpla:
1.0+ε > 1.0
Vamos, que la máquina no nos redondee ese número a 1.0, y que por tanto sea representable.

Este valor vale 1/2*B1-t (siendo B la Base y t los bits de la mantisa). Para 32 bits y en base 2, esto vale 1/2*21-23.

Una vez introducidos en los datos técnicos, podemos acotar el error de la representación de los números flotantes en precisión simple a:

|Error| < ε, lo que nos deja que:

|Error| < 2-23.

Por eso es tan frecuente ver, en todas las operaciones con números flotantes, que matemáticamente tendrían que ser exactas, como 5.2-0.1, que dan errores de redondeo como 5.09999999 y demás.

Es algo normal y no significa que el ordenador no sepa restar, sumar y demás, sino que no puede representarlo.

¿Y entonces, por qué el Internet Explorer si lo muestra bien?

La misma pregunta lo responde. Lo muestra bien, pero internamente tiene el mismo valor. Lo que hace es redondearlo antes de sacarlo por pantalla, es decir, si internamente tiene el valor de 4.999999999999 pues muestra 5.

Por eso en la página anterior dicen que aprueba las matemáticas, pero con trampas ;)

Para terminar, un ejemplo que prueba esto último.

  1. Introduce en la barra de dirección: javascript:(5.2-0.1).toFixed(24), esto muestra la resta de 5.2 – 0.1 con 24 decimales. Como puedes ver, hay un error cometido a partir del decimal número 16 (esto puede variar dependiendo del ordenador que se use).
  2. Introduce en la barra de dirección: javascript:(5.2-0.1).toFixed(10), ahora mostramos la misma operación, pero con solo 10 decimales. Ah! Ahora es exacta! No, simplemente está truncada ;)

Liberando un Nokia 6230

General Comentarios desactivados

Hace tiempo que se me murió mi movil, un Nokia 6100 creo recordar. Se le apagó la pantalla y nunca volvió a ver la luz…

Hasta ahora he estado sobreviviendo con un TSM de Vitelcom cutre, que, aunque yo nunca he sido de pedirle mucho a un movil, me gusta tener uno que al menos sea cómodo, y ese no lo era.

Pues bien, hará dos semanas mi padre me consiguió un Nokia 6230 de segunda mano. La pantalla se ve un poco como si tuviese humedad condensada por dentro, pero funciona bien.

El “problema”, es que era de amena.

Pues nada, como mi tarjeta es vomistar, había pensado en que, bueno, movil nuevo, si me cobraban 10 € liberándolo, tampoco me iba a morir… pero antes que eso, habría que mirar en tito google no? ;)

Dicho y hecho. En esta página, introduciendo tu número imei (lo puedes saber pulsando *#06# en el móvil) te generan el código para desbloquear.

Otros datos a meter en la página:

Red: Spain Retevisión Movil Amena (es el operador que tenía antes el móvil)

Generación: Probé tanto con V2 como con asic6. Ésta última funcionó.

Modelo: Nokia 6230

Una vez introducidos los datos, te genera siete códigos. Por lo visto por lo que he leído, para desbloquear fuera de EEUU se usa el último, y en EEUU el primero.

Así que listo, enciendo mi móvil amena con mi tarjeta vomistar, y me pide el código de desbloqueo. Le meto el códiguito que me ha generado (incluyendo #pw+, los números, y el +7# del final — las letras y el más se pueden conseguir pulsando varias veces el asterisco) y voilà. Ya tengo el móvil liberado.

Ya que estaba puesto, me puse a calcular también el código de seguridad, que hace falta para algunas funciones y que no te viene con el teléfono… en esta página.

Ahora tengo un teléfono completamente funcional, aunque estoy a la espera de a ver si me pueden conseguir un Nokia 6151 creo que era, nuevo. Aunque al ser 3G, creo que aún no hay algoritmos para desbloquear a partir del IMEI. En fin, si lo consigo, ya investigaré.

Mentiras

Pensamientos Comentarios desactivados

¿Por qué miente la gente?

  • ¿Intentan ocultar aquello que no les gusta de sí mismos a los demás?
  • ¿Ocultar algo que saben que han hecho mal y no sufrir las consecuencias? — también llamado responsabilidad.
  • ¿Hacer daño a alguien?
  • ¿Lo hacen a posta?
  • ¿Y cuándo está pensado desde un tiempo, premeditado…? ¿Se puede decir que fue sin querer?
  • ¿Hasta qué punto se deben perdonar las mentiras?
  • Cuando se hace con una frialdad impasible, como si no se estuviese mintiendo, como si no pasase nada, ¿qué tipo de mentira es? ¿Premeditada? ¿A mala hostia?

¿Merece la gente que miente ser respetada? ¿En qué aspectos?

¿Merece uno que le mientan?

Neo Geo en Linux

Informática, Linux 6 Comments »

Se me ha antojado así por las buenas, volver a jugar al maravilloso Metal Slug mientras sale o no para la Nintendo DS…

gngeo logo

Así que manos a la obra…

Empezamos bajando el emulador gngeo de aquí. Lo descomprimimos e instalamos:

./configure
make
sudo make install

Ya lo tenemos instalado y podemos ejecutar las roms con el comando gngeo nombre_rom. Pero también podemos instalar una interfaz gráfica.Lo mismo, bajamos desde aquí, y la descomprimimos.

XgnGeo

Esta vez, ejecutamos un script de python, que nos lo configurará todo solito ^_^:
sudo python setup.py install

Ya tenemos la interfaz instalada, pero tenemos que configurar donde están las BIOS y el archivo de drivers. Simplemente bájalos de emulatronia y arrancad el xgngeo, donde os saldrá una ventana en la que podeis introducir el directorio donde teneis las BIOS y las Roms.

[Descargar BIOS] [Descargar archivo de drivers]

Configuración del xgngeo

A jugar!

LISP

Citas Comentarios desactivados

No voy a intentar convenceros, pero para cálculo numérico, os aseguro que es mucho más comodo usar el intérprete de Lisp que la calculadora de Windows.

Lorenzo Mandow, Universidad de Málaga.

Los chistes de Tanenbaum

General Comentarios desactivados

Hace unos días, o semanas no sé ya… estudiando para el examen de Arquitecturas de Redes, le echábamos un vistazo al libro de Andrew S. Tanenbaum, y encontrábamos perlas como estas:

Alice y Bob, famosos criptógrafos

Calamares gigantes!!

Moraleja: Si te estudias las cosas la semana antes, te puedes perder más perlas de estas x’D

Redes de computadoras

Hay un bug en mis transparencias!

General Comentarios desactivados

Bug in the class projector

En la clase del viernes pasado, en Inteligencia Artificial e Ingeniería del Conocimiento.

Estaba dentro del proyector. El profesor dijo “Voy a apagar el proyector que el bicho se tiene que estar friendo“…

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Acceder