我们都知道计算机中保存数据的格式是二进制,因此我们存储浮点数时也需要转换为二进制。浮点数转换为二进制时怎么转换的呢?我们来看看。
浮点数分为整数部分跟小数部分,整数部分按照 除2取余法,我们就不多赘述了,因为影响计算机存储精度的是小数部分,小数部分如何转换呢?与整数部分可不同,采用的是乘2取整法, 我们来看下:
- 把小数乘以2,假设结果是s,如果s大于1,该位二进制值为1,如果小于1,该位二进制值为0;
- 把上一步的结果s去掉整数位,只保留小数位,假设得到结果xs,如果xs等于0,转换结束,如果xs大于0,重复第1步。
我们拿1.2举例子:
| s | 计算 | xs | 进制 |
|---|---|---|---|
| 0.2 | 0.2*2=0.4 | 0.4 | 0 |
| 0.4 | 0.4*2=0.8 | 0.8 | 0 |
| 0.8 | 0.8*2=1.6 | 0.6 | 0 |
| ... | ... | ... | ... |
可以知道,小数s*0.2 = 0转换才能结束,即s=0才能结束,但是小数存在的话不可能结果为0,因此这是无限循环不可能结束的。又因为计算机存储浮点数肯定是有限的位数,那么肯定会截断小数部分,所以精度会丢失。