我正在使用一个系统,该系统在一大组数字上以两种模式运行。在第一种模式中,系统通过简单地迭代它们并将它们添加到运行总计来聚合数字。在第二种模式中,系统并行处理这项工作,其结果是通过首先创建一些小计,然后将这些小计添加到一起来计算相同的总数。
这是系统的简化,但它是我问题的核心。由于小计聚合,最终结果有时会表现出非常小的差异。我只能猜测这是因为浮点错误的累积。
存在这两种模式是因为不可能使用并行模式在该系统中运行所有“计算”,因此必须继续存在线性模式以实现向后兼容。尽可能使用第二种模式应该更快,但由于上述问题,用户可能会看到差异。
我的问题是这个问题是否仅仅是固有的,必须被接受或整个解决方案被拒绝,或者是否可以通过以不同方式处理小计聚合问题来缓解此问题。
如果需要更多详细信息,请告诉我们!谢谢你的时间。
答案 0 :(得分:2)
存在一种用于精确求和一组浮点值的算法,着名的是available in Python。如果您使用此算法计算线性和并行模式,则它们中的两个将显示完全相同的总计:它们将计算您的一组值的精确总和。
此算法需要动态分配,可能不合适,具体取决于您的上下文,但它是我所看到的与您提供的信息唯一的解决方案。如果精度降低是可以接受的,那么其他方法也是可能的(一个明显的方法是将所有值转换为固定点,然后将它们包括在总和中。与浮点加法不同,定点加法是关联的。)