私はこれをキックのためだけに行いました(正確な質問ではありませんが、ダウンモッディングがすでに起こっていることがわかります)が、Googleが新たに発見した数学を正しく行うことができない代わりに(チェックしてください!Googleによると、500,000,000,000,002 - 500,000,000,000,001 = 0)、私は考えました少し理論を実行するために、Cで次のことを試してみます。
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);
}
このプログラムを実行すると、次のようになります
399999999999999 - 399999999999998 = 0.000000
500000000000002 - 500000000000001 = 0.000000
Google は単純な 32 ビット浮動小数点精度 (ここでのエラー) を使用しているように見えますが、上記のコードで float を double に切り替えると、問題が解決します! これでしょうか?
/mp