python精度损失问题如何产生?如何解决?

python精度损失问题

python精度损失的产生

计算机内部的加减乘除都是要把数字转化成为二进制实现的。那么,我们此处的浮点数,也要转换为二进制,才能进行计算。Python内浮点数是用机器上浮点数的本机双精度(64 bit)表示的。提供大约17位的精度和范围从-308到308的指数。
我们来看一个简单的例子。十进制1.1转换成二进制

1.10整数部分就是1,转换成二进制1(这里整数转二进制不再赘述)
小数部分:0.1
0.12=0.2取整数部分0,基数=0.2
0.2
2=0.4取整数部分0,基数=0.4
0.42=0.8取整数部分0,基数=0.8
0.8
2=1.6取整数部分1,基数=1.6-1=0.6
0.62=1.2取整数部分1,基数=1.2-1=0.2
0.2
2=0.4取整数部分0,基数=0.4
.
.
.
直至基数为0。1.1用二进制表示为:1.000110…xxxx…(后面表示省略)

关于之前的演示,相当于,因为3.4的存储,发生了精度损失(3.5不会,因为3.5的二进制是11.1,补码存储依然不会发生精度损失),所以在相减的时候,发生了一次精度损失,最后结果存储的时候,再次发生一次精度损失。

python精度损失问题的解决

我们可以通过使用round函数来处理数据。round函数的作用主要是用于进位,或者通俗一些来讲,就是我们常说的四舍五入,在这个地方使用round我们可以把10.03*100后变成的1002.9999通过进位的方式变成1003,。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值