十进制转换二进制
规则:将该数字乘以2,取出整数部分作为二进制表示的第1位;然后再将之前所得的数小数部分乘以2,将得到的整数部分作为二进制表示的第2位;以此类推,直到小数部分为0。显然就会发现小数部分一直不等于0的情况,这时候就得到一个无限位数的二进制小数点,计算机就无法完整保存所以就出现了所谓的浮点误差。
比如2.30换成二进制
0.3 * 2 = 0.6 ——————- 0
0.6 * 2 = 1.2 ——————- 1
0.2 * 2 = 0.4 ——————- 0
0.4 * 2 = 0.8 ——————- 0
0.8 * 2 = 1.6 ——————- 1
0.6 * 2 = 1.2 ——————- 1
所以二进制为:10.01001100110011……
比如2.75换成二进制
0.75 * 2 = 1.5——————- 1
0.5 * 2 = 1.0 ——————- 1
所以二进制为:10.11
二进制转换十进制
这部分和整数部分差不多。乘以相应位数的负值方比如
上面的
传说中的浮点误差
由上面两个例子可以知道
2.30二进制为:10.01001100110011……
如果计算机只能保存四位那么就保存了前四位10.01,再次读取出来时转为十进制就是2.25,误差贼大
但是
2.75的二进制为:10.11
如果计算机只能保存四位那么就保存了前四位10.11,再次读取出来时转为十进制就是2.75,没有误差
如果能保存八位呢2.30保存为10.010011,再次读取出来时转为十进制就是2.296875,,再和原来一样保留两位小数点就是2.29,越来越接近2.30了,学过无穷级数会知道,这是无穷级数相加会越来越接近。但是取出来后只保留两位小数点,所以到2.9之后多接近都是2.9除非去掉的部分四舍五入。