为什么大部分小数在计算机中是不精确的

浮点型数字(俗称小数)大部分在计算机中是不精确的,主要是因为计算机的运行和计算都是以二进制进行的,而在日常生活中我们是以十进制为主来进行计算的,所以在使用计算机的时候,计算机会将我们日常的十进制数据转换成二进制才能进行使用和计算,因为这一特性,导致计算机在进行浮点型数据二进制和十进制转换的时候不那么精确,下面我以十进制浮点数转换为二进制浮点数来举例说明:

二进制与十进制之间相互转换的规则:整数部分转整数,小数部分转小数。

十进制转二进制:(以19.4为例)

整数部分:

19(十进制)=0001 0011(二进制)

小数部分:

//转换规则:小数点后面的数 × 2 得到积,若积小于1则在二进制小数部分写0,然后继续 × 2, 若积还是小于1则继续在二进制小数部分写0,如此循环直到积大于1 ,得到大于1的积之后在二进制小数部分写1,然后将整数部分去掉,继续用2乘剩下的小数部分,如此循环计算。

①0.4*2=0.8(0.8<1 二进制小数部分写0,继续计算)

0001 0011.0

②0.8*2=1.6(1.6>1 二进制小数部分写1,去掉整数部分1,小数部分0.6继续计算)

0001 0011.01

③0.6*2=1.2 (1.2>1 二进制小数部分写1,去掉整数部分1,小数部分0.2继续计算)

0001 0011.011

④0.2*2=0.4(0.4<1 二进制小数部分写0,继续计算)

0001 0011.0110

⑤0.4*2=0.8(0.8<1 二进制小数部分写0,继续计算)

0001 0011 .0110 0

写到这里不难发现,二进制的小数部分是0110,4位一直无限循环,既然是无限循环那么在运算的时候就会带来误差,从而导致大部分小数在计算机中是不精确的。

同理,既然十进制转为二进制会出现这样的问题,那么一个经过先转为二进制再转回十进制的数,它肯定是经过精确到小数点后某某位的操作的,所以转回来十进制的数肯定也不可能与原来完全相等。

(这种误差在十进制小数部分为5或者小数部分经过多次 ×2 等于5时不存在,因为0.5*2=1.0,去掉整数部分后剩余的部分为0,只需在二进制小数部分写1即可。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值