栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么更改总和顺序会返回不同的结果?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么更改总和顺序会返回不同的结果?

也许这个问题很愚蠢,但是为什么仅仅改变元素的顺序会影响结果呢?

它将根据值的大小更改四舍五入的点。作为示例 _样的_事情,我们所看到的,我们假装的,而不是二进制浮点,我们用的是十进制浮点类型有4显著位,在此,“无限”精确执行每次添加,然后四舍五入到最接近的可表示数字。这是两个总和:

1/3 + 2/3 + 2/3 = (0.3333 + 0.6667) + 0.6667     = 1.000 + 0.6667 (no rounding needed!)     = 1.667 (where 1.6667 is rounded to 1.667)2/3 + 2/3 + 1/3 = (0.6667 + 0.6667) + 0.3333     = 1.333 + 0.3333 (where 1.3334 is rounded to 1.333)     = 1.666 (where 1.6663 is rounded to 1.666)

我们甚至不需要非整数就可以解决这个问题:

10000 + 1 - 10000 = (10000 + 1) - 10000       = 10000 - 10000 (where 10001 is rounded to 10000)       = 010000 - 10000 + 1 = (10000 - 10000) + 1       = 0 + 1       = 1

这可能更清楚地表明,重要的部分是我们只有有限数量的 有效数字 ,而不是有限的 小数位数
。如果我们总是可以保持相同的小数位数,那么至少要加上和减去,我们会很好的(只要这些值没有溢出)。问题在于,当您获得更大的数字时,会丢失较小的信息-在这种情况下,将10001舍入为10000。(这是埃里克·利珀特(EricLippert)在回答中指出

重要的是要注意,在所有情况下,右侧第一行的值都相同-因此,尽管重要的是要理解十进制数字(23.53、5.88、17.64)不会精确地表示为

double
值,由于上面显示的问题,这只是一个问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495595.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号