Avec la nouvelle incapacité de Google à faire des mathématiques correctement (vérifiez-le! selon Google 500,000,000,000,002 - 500,000,000,000,001 = 0
), j'ai pensé essayer ce qui suit en C pour tester une petite théorie.
int main()
{
char* a = "399999999999999";
char* b = "399999999999998";
float da = atof(a);
float db = atof(b);
printf("%s - %s = %f\n", a, b, da-db);
a = "500000000000002";
b = "500000000000001";
da = atof(a);
db = atof(b);
printf("%s - %s = %f\n", a, b, da-db);
}
Lorsque vous exécutez ce programme, vous obtenez ce qui suit
399999999999999 - 399999999999998 = 0.000000
500000000000002 - 500000000000001 = 0.000000
Il semblerait que Google utilise une simple précision flottante sur 32 bits (l'erreur ici), si vous remplacez float par double dans le code ci-dessus, vous résolvez le problème! Est-ce que cela pourrait être la solution?