2024-04-25 17:51:21 发布
网友
问题很简单,为什么会这样:
>>> (2**32-1)**2 - 4.0**2 - (2**32-1)**2 0.0 >>> (2**32-1)**2 - (2**32-1)**2 - 4.0**2 -16.0
我知道这一定是关于浮点舍入错误,但我需要一个正式的解释,我们如何才能避免这种错误?在
p/s:Im使用Python2.7.3,MacOSX,64位
Python int类型可以轻松地超过平台的字大小,但是浮点值与硬件绑定在一起。不要混合长整型值和浮点型值。在
在第一个示例中,第一个整数的大小远远超过浮点数的最大精度。在
在64位Mac上,浮点可以表示的最大小数位数为15:
>>> import sys >>> sys.float_info.dig 15
但是你的整数使用20位数。为了匹配指数,必须将16.0浮点值截断为15个有效数字,这意味着它基本上四舍五入为0。在
如果必须对长整数使用浮点运算,请使用decimal.Decimal()类型,它不受硬件限制:
decimal.Decimal()
Python int类型可以轻松地超过平台的字大小,但是浮点值与硬件绑定在一起。不要混合长整型值和浮点型值。在
在第一个示例中,第一个整数的大小远远超过浮点数的最大精度。在
在64位Mac上,浮点可以表示的最大小数位数为15:
但是你的整数使用20位数。为了匹配指数,必须将16.0浮点值截断为15个有效数字,这意味着它基本上四舍五入为0。在
如果必须对长整数使用浮点运算,请使用
^{pr2}$decimal.Decimal()
类型,它不受硬件限制:相关问题 更多 >
编程相关推荐