计算机的小数运算大坑
计算机只能存储二进制,对于小数,计算机的转换规则是取得小数、乘2取整、顺序排列
比如小数0.125,转换成二进制就是01
- 取小数:0.125;乘2:0.125 × 2 = 0.5;取整:0
- 取小数:0.5;乘2:0.5 × 2 = 1.0;取整:1
- 取小数:0.0,已经为0了,可以停止
但比如小数0.2
- 取小数:0.2;乘2:0.2 × 2 = 0.4;取整:0
- 取小数:0.4;乘2:0.4 × 2 = 0.8;取整:0
- 取小数:0.8;乘2:0.8 × 2 = 1.6;取整:1
- 取小数:0.6;乘2:0.6 × 2 = 1.2;取整:1
- 取小数:0.2;乘2:0.2 × 2 = 0.4;取整:0
- ……
0.2转换成二进制后成为了一个循环二进制小数00110011…,这样没完没了了
但计算机肯定不能存一个无限循环,所以会约掉
这便是计算机对小数运算不精确的本质原因
评论