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

本质上是因为计算机不能精确计算无限的数。

有的十进制小数部分转换为二进制小数部分,会无限循环,这导致了大部分小数在计算机中是不精确的。

示例:十进制的15.6转为二进制的小数 == 1111.1001 1001 1001.... 循环不尽。

下面我们来详细观察将其转换为二进制的步骤:

将十进制数转换为二进制分两部分-----整数部分转整数部分,小数部分转小数部分。

 整数部分

        15转为二进制:15/2 会得到商和余数两部分,我们持续对他除2直到商为0为止,这时,自下而上,余数组合起来便是15对应的二进制。结果为1111。

小数部分:

        0.6转为二进制:对该小数持续乘2,直至结果为1.0或者进入循环便可结束。

        细解:

        第一步:0.6 * 2 = 1.2  给其对应的二进制小数点后补1,余0.2,我们继续对它乘2。

        第二步:0.2 * 2 = 0.4  给其对应的二进制小数点后补0,我们继续对它乘2。

        第三步:0.4 * 2 = 0.8  给其对应的二进制小数点后补0,我们继续对它乘2。       

        第四步:0.8 * 2 = 1.6  给其对应的二进制小数点后补1,余0.6,我们继续对它乘2。       

        ......

        此时,我们发现已经进入了循环,又回到了刚开始的0.6,持续对它乘2......

最终,15.6这个有限的小数表示为二进制为:1111.1001 1001 1001.... 因此,大部分小数在计算机中是不精确的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值