接着总结,总结完了就修改验证。
马上我就进行了方案4、3、2的一起验证,结果喜人。
在瞬时值比较小时,比如0.001234567,方案4可以精确到理论值,但误差出现在小数点后5位,基本可以忽略。方案3和方案4类似,只是误差稍大些,但可以接受。方案2误差较大。在100w次累积后,方案4继续保持精度喜人,方案3已经停止累积了,方案2误差很大了。
以下是结果数据:
瞬时值:0.000123456,累积初始值260000,经过1000w次累积,没错1000w次。理论值:261234.56
方案2:261234.495144,
方案3:261234.5625
方案4:261234.56000408
数据都是用整数、小数分开来记录的,不然一个浮点数没法有如此的精度。
其他数据我就不写了。(从垃圾桶翻东西,还是有些想法的)
如果瞬时值加大,方案3出现了较大误差,方案2不如方案4精确。
如果初始值加大,方案3不能累积了,方案2也出现了较大误差,方案4继续稳定。
--------------------------------------------------------------------------
到此结束。
别看Kahan算法简单,用SCL写也就短短几行,但过程蛮曲折的,结果的精度也很高,基本做到了理论值的有效位都保持了。
18-04-02 19:51