Python sum() 对同一个列表进行不同排序时给出舍入误差
Python sum() gives a round off error on the same list sorted differently
sum(sorted([0.16666666666666666, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.16666666666666666, 0.16666666666666666, 0.08333333333333333, 0.08333333333333333]))
给出 0.9999999999999999 作为输出,而同一个列表具有不同的元素排序,例如
sum([0.16666666666666666, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.16666666666666666, 0.16666666666666666, 0.08333333333333333, 0.08333333333333333])
输出 1。
如果前一个输出可以四舍五入为 1,有什么办法吗?
未排序列表是对 python2.7 代码执行操作的输出。将我们的代码迁移到 python 3.8 后,操作的输出更改为排序列表,这影响了总和输出。
您可以在可迭代对象中使用 math.fsum(iterable)
function.it returns 精确的浮点值总和。
sum(sorted([0.16666666666666666, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.16666666666666666, 0.16666666666666666, 0.08333333333333333, 0.08333333333333333]))
给出 0.9999999999999999 作为输出,而同一个列表具有不同的元素排序,例如
sum([0.16666666666666666, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.08333333333333333, 0.16666666666666666, 0.16666666666666666, 0.08333333333333333, 0.08333333333333333])
输出 1。
如果前一个输出可以四舍五入为 1,有什么办法吗?
未排序列表是对 python2.7 代码执行操作的输出。将我们的代码迁移到 python 3.8 后,操作的输出更改为排序列表,这影响了总和输出。
您可以在可迭代对象中使用 math.fsum(iterable)
function.it returns 精确的浮点值总和。