1

我正在使用一个在大量数字上以两种模式运行的系统。在第一种模式中,系统通过简单地迭代它们并将它们添加到运行总数来聚合数字。在第二种模式下,系统并行处理这项工作,其结果是先创建多个小计,然后将这些小计相加,计算出相同的总计。

这是系统的简化,但它是我问题的核心。由于小计聚合,最终结果有时会显示出非常小的差异。我只能猜测这是因为浮点错误的累积。

这两种模式的存在是因为不可能在这个系统中使用并行模式运行所有“计算”,因此线性模式必须继续存在以实现向后兼容。在可能的情况下使用第二种模式应该会更快,但由于上述问题,用户可能会看到差异。

我的问题是这个问题是否只是固有的,必须接受还是拒绝整个解决方案,或者是否可以通过以不同的方式处理小计汇总问题来缓解这个问题。

如果需要更多详细信息,请告诉我!感谢您的时间。

4

1 回答 1

2

有一种算法可以对一组浮点值进行精确求和,这在 Python 中很有名。如果您使用此算法计算线性模式和并行模式,它们两者将显示完全相同的总数:它们都将计算您的一组值的精确总和。

该算法需要动态分配,根据您的上下文可能不合适,但它是我根据您提供的信息看到的唯一解决方案。如果可以接受降低精度,则其他方法可能是可能的(一个明显的方法是将所有值转换为定点,然后再将它们包括到总和中。定点加法与浮点加法不同,是关联的)。

于 2013-07-29T15:50:09.223 回答