小数在计算机中的表示

时间:2022-04-05 04:50:28

运行如下代码得到结果

小数在计算机中的表示

你猜是多少呢?

小数在计算机中的表示

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

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

S P M

其中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.