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