首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google Calculator故障,float vs.是可能的原因吗?

Google Calculator故障,float vs.是可能的原因吗?
EN

Stack Overflow用户
提问于 2008-08-25 23:09:30
回答 5查看 2.5K关注 0票数 6

我这样做只是为了好玩(所以,不完全是一个问题,我可以看到降级已经发生了),但是,代替谷歌新发现的inability来做math correctly (检查它!根据google 500,000,000,000,002 - 500,000,000,000,001 = 0),我想我应该尝试下面的C语言来运行一些理论。

代码语言:javascript
运行
复制
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);
}

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

代码语言:javascript
运行
复制
   399999999999999 - 399999999999998 = 0.000000
   500000000000002 - 500000000000001 = 0.000000

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

/mp

EN

Stack Overflow用户

发布于 2008-08-25 23:19:45

有关这种愚蠢的更多信息,请参阅这篇关于Windows计算器的优秀文章。

When you change the insides, nobody notices

的内部计算-算术引擎-完全被抛弃,并从头开始重写。标准的IEEE浮点库被替换为任意精度的算术库。这是在人们一直在写哈哈文章说Calc不能正确地做十进制算术之后完成的,例如计算10.21 - 10.2会得到0.0100000000000016。

票数 4
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档