python 精度问题丢失_python – 为什么在乘以整个整数时会丢失精度?

您正在使用真正的除法运算符/进行除法,这将始终产生浮点值.改为使用floor division来获取整数结果:

>>> a = 313585730727764141482831584863

>>> b = a*2

>>> c = b // 2

>>> a == c

True

您的计算机硬件无法以所需的精度处理浮点值.

另一种方法是使用decimal.Decimal() values,但这会导致算术运算速度变慢.

在Python 2中,/运算符是分区运算符,但仅适用于整数.要在Python 2中获得相同的行为,请添加:

from __future__ import division

行为发生了变化,因为仅使用整数运算符和使用至少一个float参数之间的区别令人困惑.

换句话说,标准的Python 2 /运算符与Python 3 / division运算符不同.当应用于两个整数操作数时,它就像Python 3中的// floor division运算符一样.但是如果两个操作数中的任何一个都是float,那么它就像/ float除法运算符一样.上面的__future__ import为Python 3中的真正除法运算符交换了Python 2 /运算符.

你可以在反汇编Python字节码时看到这个:

>>> import dis

>>> def olddivision(x, y): return x / y

...

>>> dis.dis(olddivision)

1 0 LOAD_FAST 0 (x)

3 LOAD_FAST 1 (y)

6 BINARY_DIVI

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值