Estas aquiContenido / Explorer, aprobado en matemáticas (con trampas ;)

Explorer, aprobado en matemáticas (con trampas ;)


Poradmin- Publicado el28 Septiembre 2007

Explorer es un alumno aventajado en matemáticas, que al llegar a su casa en Redmond y entregar las notas del cole llena de orgullo a Tito Bill, a diferencia de su hermano Excel, la oveja negra de la familia.

En realidad, el examen fue sencillo. Consistía en copiar y pegar en la barra de direcciones lo siguiente:

javascript:5.2-0.1

Pulsa Enter y... sí, parece fácil, pero sólo Explorer 7 acertó con el resultado. Ni Firefox (Windows y Linux), ni Opera (Windows y Linux), ni Safari (Windows), ni IceWeasel (Linux), ni Epiphany (Linux), ni Flock (Linux), ni Konqueror (Linux) fueron capaces de dar la solución correcta con exactitud...

ACTUALIZADO: Vaya por dios. El gozo de Tito Bill en un pozo. Explorer suspende como Excel, pero el muy cabrón ha sabido engañarnos mejor. Ahora le ha pillado el profe haciendo trampas y se ha caído con todo el equipo. Ya me parecía a mí raro que Explorer ganara a alguien en algo... ;)

Bueno, sí; semejante falta de precisión en las operaciones de coma flotante no lleva a ningún sitio, pero no deja de resultar curioso que, por una vez, Explorer supere en algo a toda la peña.

Visto en la lista de Full-Disclosure, donde lo presentan como "un grave error de cálculo en Firefox", con el consiguiente cabreo del personal.

Etiquetas

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).

Un error de visualización como el excel, jajaja.

Realicé la cuentas sobre Epiphany y Firefox y el resultado es:

5.1000000000000005

Inclusive el interprete de python version 2.4.4 da el mismo resultado :-(

A que se deberá el cinco final. Google es absoluto con su 5.1 :-)

Es normal que Epiphany y Firefox (y IceWeasel) den el mismo resultado porque los tres utilizan Gecko.

Cuando escribes decimales, estos son representados por números en coma flotante. almacenan 2 valores: mantisa y exponente:

0.52 * 10^1

Este formato nos permite representar de manera muy precisa números muy grandes y muy equeños, siendo más o menos precisos en función de la cantidad de cifras de la mantisa, pero no pueden representar cualquier número decimal, sino su aproximación.

De la misma manera que si guardo el valor 2.1 en una variable entera y le sumo 1 obtendré el 3. No habiéndose cometido un error de cálculo sino de representación del valor.

De hecho, si programas en C,

float a=5.2;
float b=0.1;

Y los restas, tendrás probablemente el mismo resultado.
Para evitar este problema, en algunos lenguajes de programación y algunos sistemas (bases de datos) existen tipos "decimal" con capacidad de representar números de n cifras con m decimales.

La de horas que habré perdido programando aplicaciones Java en las que intervenían conversiones entre float e int... (basicamente diagramas de quesitos, donde drawarcs() hay que darlos en pixels en lugar de coordenadas polares... )

A mí me sale: 5.1000000000000005.

El error es lógigo si tenemos en cuenta que hay números en coma flotante que no pueden ser representados más que de forma aproximada en notación ieee754. Con el tiempo he aprendido que si nos interesa trabajar con pocos decimales es preferible trabajar en notación fija con el viejo truco de multiplicar todo por 1000 (tantos ceros como decimales vayamos a usar) y luego al final dividir...

No estoy seguro de que este error sea comparable con el del Excel 2007. En este caso se trata de un error de redondeo; en el otro el "redondeo" es demasiado "bestia".

Realmente nos falta "cultura de coma flotante": En mis primeras épocas de Java, se me ocurrió evaluar 0/0, y pegué un brinco pensando que había pillado un error en la JVM cuando la consola me imprimió "NaN". Pardillo que es uno....

PS: en mi firefox con linux javascript:850.0*77.1 da un resultado de 65534.99999999999. Arrieritos somos y en el camino nos encontraremos

Es un error al pasar valores de decimal a binario, no todos los valores en base diez pueden pasarse a base 2 con un numero exacto.

¿por qué Explorer lo hace bien?

pero me pregunto si será la única operación que hace bien, y por casualidad.

Lo siento, yo también caigo en la tentación de los anti-microsoft.

Prueba javascript:5.1000000000000005*1 en Internet Explorer y lo sabrás :p

--
nethen

javascript:5.1000000000000005*1

IE no falla, engaña; lo peor de todo es que engañar es lo normal.

Publicidad

Patrocinadores

Kriptópolis alojado en
Zilos-Veloxia Network

Tu mejor defensa:
Bufet Almeida

Publicidad