我怎样才能以不同的顺序添加花车,并总是得到相同的总和? [英] How can I add floats together in different orders, and always get the same total?
本文介绍了我怎样才能以不同的顺序添加花车,并总是得到相同的总和?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
a
, b
和 c
,使得(a + b)+ c!= a +(b + c)
。是否有一个求和算法,可能类似于 Kahan summation ,即保证这些数值可以按任何顺序加总,总是达到完全相同的(相当准确的)总数?我正在寻找一般情况下(即不是一个解决方案,只能处理3个数字)。是任意的精度算术唯一的路要走吗?我正在处理非常大的数据集,所以我想避免使用任意精度算术的开销。如果可能的话。
谢谢!
解决方案
有一个有趣的全精度求和算法 msum recipe),为了得到正确舍入的结果,需要比单纯地求和部分和更加小心。看看配方下面的注释,以及Python的实现(下面链接)来解决这个问题。
$ b 它 使用任意形式用于保存部分和的精度算术(中间和表示为非重叠的双精度和),但是可能足够快,尤其是当所有的输入具有大致相同的幅度时。它总是给出一个正确的四舍五入的结果,所以准确性是你所期望的那样好,最后的总和独立于加数的次序。它基于这篇论文(Adaptive Precision Floating-Point算术和快速稳健的几何谓语)Jonathan Shewchuk。
Python使用这种算法来实现math.fsum,它能正确舍入顺序无关的求和。您可以看到Python使用的C实现 here