运行如下代码得到结果
你猜是多少呢?
嗯你没有看错得到的答案是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位) |