¿Por qué falla la calculadora de Google?
Tengo una sospecha de la posible causa de la falla de la calculadora de Google, prueben este programa en C:
#include <stdio.h>
#include <math.h>
int main()
{
char* a = "399999999999999";
char* b = "399999999999998";
float da = atof(a);
float db = atof(b);
printf("da = %f, db = %f\n", da, db); // para ver como se almacenan los numeros
printf("%s - %s = %f\n", a, b, da-db);
a = "500000000000002";
b = "500000000000001";
da = atof(a);
db = atof(b);
printf("da = %f, db = %f\n", da, db);
printf("%s - %s = %f\n", a, b, da-db);
}
Al ejecutar este programa obtendrán como salida lo siguiente:
399999999999999 - 399999999999998 = 0.000000 500000000000002 - 500000000000001 = 0.000000
parece que en Google están usando precisión simple, es decir, números en punto flotante en 32 bits. prueben cambiando float por double en el programa anterior, y problema resuelto.
Es un error feo, aunque no es un tremendo misterio Mr. Chips….