C++ 如何在小错误的情况下添加浮点数?
有一个文件,文件中有10000个数字,如以下数字C++ 如何在小错误的情况下添加浮点数?,c++,floating-point,operating-system,C++,Floating Point,Operating System,有一个文件,文件中有10000个数字,如以下数字 7.474571938241547 5.9520387080950865 8.440712641801738 7.233918953859444 5.359040371183379 7.788831268552525 5.605003246355943 5.464119475471641 4.196570126808656 所以我需要将它们与float类型一起添加,但是当我按照原始顺序将它们添加到一起时,会有一定的误差。所以当我把它们按升序相加
7.474571938241547
5.9520387080950865
8.440712641801738
7.233918953859444
5.359040371183379
7.788831268552525
5.605003246355943
5.464119475471641
4.196570126808656
所以我需要将它们与float类型一起添加,但是当我按照原始顺序将它们添加到一起时,会有一定的误差。所以当我把它们按升序相加时,总和会变小。
当我按降序添加它们时,总和也会变小。将错误最小化的最佳方法是什么
使用有限精度算法的有效解决方案:对于所有用例,没有一种最佳算法。一个著名的浮点求和算法是,但对这个问题的研究是活跃的。使用双精度。。。它们是浮点运算的两倍。计算机上的浮点运算总是包含一些舍入误差,使用结果进行的算术运算越多,舍入误差就越大。一般来说,要获得更精确的结果,应将最小值(绝对值)与最大值(绝对值)相加。然而,只有当事情的规模大不相同时,这才有帮助。在您的情况下,事情在大小上非常相似,这并不重要,无论您以何种方式进行操作,都会得到一般的浮点错误。使用较大的类型(双精度?)或较大的精度浮点库:这是否回答了您的问题?如果需要无损精度,请使用某种可以添加数字字符串的BigNum或BCD,而不是
float
或double
。