我注意到array.sum
和array.inject(:+)
会产生不同的结果。这是什么原因?
a = [10, 1.1, 6.16]
a.inject(:+)
# => 17.259999999999998
a.sum
# => 17.26
答案 0 :(得分:7)
当Array#sum
的某些输入是浮点数时,{{1}}的C实现委托给Kahan summation algorithm。
此算法......
与明显的方法相比,...显着减少了通过添加有限精度浮点数序列获得的总数中的数值误差。这是通过保持单独的运行补偿(一个变量来累积小错误)来完成的。