Google 计算器故障,可能是 float 与 double 的原因吗?

mau*_*ana 6 c math google-search

我这样做只是为了踢(所以,不完全是一个问题,我已经可以看到向下修改了)但是,代替谷歌新发现的无法正确进行数学运算 (检查它!根据谷歌 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);
}
Run Code Online (Sandbox Code Playgroud)

当你运行这个程序时,你会得到以下信息

   399999999999999 - 399999999999998 = 0.000000
   500000000000002 - 500000000000001 = 0.000000
Run Code Online (Sandbox Code Playgroud)

看起来谷歌正在使用简单的 32 位浮点精度(这里的错误),如果你在上面的代码中将 float 切换为 double,你就解决了这个问题!会是这样吗?

/mp

gil*_*gil 2

在 C# 中,尝试一下(double.maxvalue == (double.maxvalue - 100)),你就会得到,true但这就是它应该的样子

想一想,您有 64 位表示大于2^64( double.maxvalue) 的数字,因此不准确是意料之中的。