El Sr. Google se marea restando.
Publicado por: uaozé en blogosfera, curiosidad, internet, tags: edipoTrebol, error, google, restaHoy, como todas las mañanas, abrí el blog de un colega, uno de los blogs que visito más asiduamente, a ver si había alguna nueva entrada. Él está en México y es informático, de modo que aúna estas dos temáticas en su blog, y la verdad es que resulta interesante.
Pues la entrada de hoy era acerca de la calculadora de Google. Como yo nunca me entero de estas cosas el primero, pues no sé cuánto tiempo llevará activo este servicio, pero hoy leí en este blog que no sabe restar del todo bien.
-”Qué raro, con lo bien que hace todo el Sr. Google.”- me dije, así que empecé a probar distintas cantidades y es verdad. Con números pequeños va como la seda, pero con números altos ya empieza a oler a quemao. Si ponéis, por ejemplo 10000000000000000002-10000000000000000001 (20 cifras) debe devolver 1, pero devuelve 0.

He hecho algunas pruebas rápiditas (que tampoco tengo mucho tiempo para una batería de pruebas exhaustiva) y una razón que se me ocurre es que sea por el desbordamiento. Pero realmente no estoy muy seguro de que esta sea la razón real de dicho fallo.
Se puede probar esto haciendo, por ejemplo, 999999999999999-999999999999998 (15 cifras) y devuelve 0, pero si ahora quitamos un 9 y hacemos 99999999999999-99999999999998 (14 cifras) devuelve 1, el resultado correcto.
No sé si será por esta razón, a ver si alguien tiene otra hipótesis.
Me tropecé con ello y lo leí en edipoTrebol.



Entradas (RSS)
29 Agosto, 2008 a las 9:07 am
Pues la verdad es que es curioso, y tiene toda la pinta de ser por desbordamiento. Ains, se nos ha caido un mito
29 Agosto, 2008 a las 2:23 pm
Que aburrida esta la gente del mundo
29 Agosto, 2008 a las 2:33 pm
jajaja, yo lo que no sé es cómo a alguien se le ocurre restar números tan grandes y darse cuenta del error.
2 Septiembre, 2008 a las 3:04 pm
[...] con que trabaja Google, su sencillez y eficiencia priman por encima de todo (a pesar de que tampoco es perfecto), pero están teniendo un éxito tan grande que me hace temer que pierda ese espíritu con el que [...]
3 Septiembre, 2008 a las 2:47 pm
[...] diamante brilla. (5 ) Ciegos que pueden sacar foto (6) y que el buscador de Google no sabe restar (7) Para terminar, cuelgo un video curioso de como el cuerpo de policia de Italia se entretiene con [...]
9 Septiembre, 2008 a las 7:14 pm
Probablemente el error se debe a que cualquier soporte informático que resuelve cuentas , lo que hace es utilizar el sistema binario para realizar los cálculos, pero ante números tan grandes el sistema binarios se hace demasiado extenso. Trataré de explicarme un poco mejor.
Cuando escribimos algo en soporte informático (por ejemplo la letra “A”), el ordenador traduce dicha letra a sistema binario, con lo que obtiene una serie de 0 y 1 que en su lenguaje significa “A”. Para codificar todas las letras y símbolos son necesarias muchas “celdas” (no se como lo llaman los informáticos o los especialistas en lenguajes informáticos) donde se situan cada 0 o 1. Creo que son 24 celdas para codificar cada símbolo, pero no estoy nada seguro, luego no digáis en ningún lado que son 24 con seguridad. Eso debe asegurarlo un informático. Luego en el ejemplo de escribir la A, el ordenador lo que entiende es una cadena de 0 y 1 donde el primer 0 o 1 puede significar que es mayúscula o minúscula (la letra), el siguiente grupo de 6 o 7 celdas sirve para indicar qué letra del alfabeto has elegido, el siguiente grupo indica otra cualidad (por ejemplo acento), y así se completan las 24 “celdas” indicando las múltiples variantes.
Una vez conocida la forma de codificación, explicamos qué pasa con los números. Cuando escribimos un número pequeño, es muy fácil pasarlo a binario para que el ordenador opere con él (puede que la primera celda indique si es un número o una letra y en las 23 siguientes, indique qué números es) Si intentamos restar 3-2, el ordenador traduce 2 a binario (=10) y 3 a binario (=101) y luego realiza las operaciones. El problema aparece cuando el número es muy grande. Para solucionar esto, lo que hace el ordenador es transformar el número en un número exponencial. Por ejemplo, el 99999999999999999999, lo traduce como 0,999999999·10^20, de manera que se reservan las segundas 4 celdas al exponente del 10 y las restantes 20 celdas al número en cuestión. Esto permite que se puedan escribir números muchísimo más grandes, pero claro, hay un problema… si al realizar esto el ordenador prescinde de las últimas cifras y redondea para que “quepan en las celdas” el número que hemos escrito, se puede llegar a error.
Esto es lo mismo que ocurre en las calculadoras cuando pone ERROR, que el sistema no es capaz de almacenar el número tan grande que le hemos introducido, porque no tiene celdas suficientes para ello.
Quiero que quede claro que yo solo hablo con propiedad de la forma de codificación (lo estudié en segundo de carrera de Matemáticas). No soy informático y no sé exactamente cuantas “celdas” se tienen en cada sistema, aunque se que el número de celdas siempre es un número potencia de 2 (2,4,8,16,32,64,128,256,512,1024,… supongo que estos números os sonarán)
Nada, tal y como le digo a mis alumnos, “la calculadora es estúpida al lado vuestra, pero si se equivoca calculando la culpa, probablemente, es de vuestro dedo”. Tenemos que ser consciente de los errores informáticos para poder asegurar que nuestras operaciones son fiables.