【发布时间】:2021-05-05 15:32:03
【问题描述】:
有一个文件,文件中有10000个类似以下数字的数字。
7.474571938241547
5.9520387080950865
8.440712641801738
7.233918953859444
5.359040371183379
7.788831268552525
5.605003246355943
5.464119475471641
4.196570126808656
所以我需要将它们与浮点类型一起添加,但是当我按照原始顺序将它们添加在一起时会有误差。因此,当我按升序添加它们时,总和会变小。 当我按降序添加它们时,总和也会变小。最小化错误的最佳方法是什么?
【问题讨论】:
-
使用双精度...它们是浮点数的两倍
-
计算机上的浮点运算总是会包含一些舍入误差,这些误差总是会复合(并变得更大)您使用结果执行的算术运算越多。
-
一般来说,为了获得更准确的结果,您应该从最小到最大(的绝对值)相加。但是,只有在大小显着不同的情况下,这才会有所帮助。在您的情况下,事情的大小非常相似,这无关紧要,无论您采用哪种方式,您都会得到一般的浮点错误。使用更大的类型(双精度?)或更大精度的浮点库:en.wikipedia.org/wiki/…
-
如果您需要无损精度,请使用某种可以添加数字字符串的 BigNum 或 BCD,而不是
float或double。
标签: c++ floating-point operating-system