小数在计算机中的表示

运行如下代码得到结果


你猜是多少呢?


嗯你没有看错得到的答案是57.

所以为什么会出现这种情况呢?首先需要探究的是0.58这个数字是如何在计算机中存储的。我们一般用下面格式表示浮点数。

SPM

其中S是符号位,P是阶码,M是尾数。

单精度浮点数是32位,双精度浮点数是64位。

S P M 表示公式 偏移量
1 8 23 (-1)S*2(P-127)*1.M 127
1 11 52 (-1)S*2(P-1023)*1.M 1023

以双精度浮点数为例,可以得到其二进制表示格式如下。

S(第64位)P(第52到63位)M(第0到51位)
这个坑我觉得我要填不完了。。总而言之,0.58用二进制来表示的话是无限长的值。引用一句话, 你看似有穷的小数, 在计算机的二进制表示里却是无穷的。 这个坑填完了。知道了这个问题,那么很容易就知道最后的结果为什么是57了,0.57999999999*100那么取整数就是57.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值