float和double存储类型为什么是非精确存储
计算机并不能直接地精确存储十进制小数
- 计算机使用二进制数来存储我们的数据,而二进制数并不能直接的精确存储十进制小数
- 我们人类常常使用十进制进行运算,所以可能没有注意到进制与进制之间并一定能精确转换,比如三进制的 0.1 ,在十进制中是0.33的无限循环,二进制和十进制也类似。
- 举个粒子,十进制的 0.6 相当于二进制的 11/101 ,我们来算一下看看是多少
4. 可见,在十进制中的 0.6 在二进制中是 0.10011001 的无限循环, float 和 double 使用的浮点数存储结构虽并不是直接的二进制数,但终归还是二进制数,也就无可避免地不能很好地兼容十进制小数。
拓展
- 学习链接1:IEEE-754浮点转换器
- 深入了解通道:float的精度和取值范围
个人笔记:探索时发现的特异点
- float 分成三个部分:1.符号位:1位; 2.指数位:8位; 3.尾数位:23位
- float 默认有个1不会写出来,转换时需要在尾数位前面加上
- float 的指数位为需要 -127 才能得到 float 真正的指数
- float 的指数位底数为 2
- float 存储负数时用的也是原码而非补码