当前位置:  开发笔记 > 编程语言 > 正文

Python2 math.fsum不准确吗?

如何解决《Python2math.fsum不准确吗?》经验,为你挑选了1个好方法。

我正在使用python2数学模块来计算fsum的总和.据我所知,0.1通常不能存储二进制.据我所知math.fsum应该以某种方式解决这个问题.

import math
math.fsum([0.0, 0.1])
#0.1
math.fsum([0.1, 0.1])
#0.2
math.fsum([0.2, 0.1])
#0.30000000000000004
math.fsum([0.3, 0.1])
#0.4
math.fsum([0.4, 0.1])
#0.5

所以math.fsum([0.2,0.1])== 0.3将为False.这应该是这样的吗?难道我做错了什么?

我怎样才能得到0.2 + 0.1 == 0.3为真?



1> Mark Dickins..:

你误解了什么math.fsum.它计算给定输入的最准确可能总和(即,与输入的精确数学和最接近的精确可表示值).它并没有用你原先想到的数字神奇地取代它的输入.

在上面的第三行中,输入to math.fsum是一个包含值的列表,0.1000000000000000055511151231257827021181583404541015625并且0.200000000000000011102230246251565404236316680908203125(请记住,使用二进制浮点,所见即所得;这里我显示了Python使用的确切值).这两个值的确切总和是0.3000000000000000166533453693773481063544750213623046875,最接近可表示的IEEE 754 binary64浮动到那个精确的总和0.3000000000000000444089209850062616169452667236328125,这就是你得到的.

你问math.fsum的行为,就好像是给定的精确值0.10.2,但它无法知道这是你想要的方式:它只能在你给它的输入操作.

请注意,在大多数机器上,添加两个浮点数已经正确舍入,因此使用没有任何优势math.fsum.math.fsum旨在除去四舍五入参与求和误差的累积多于两个浮动.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有