在Go语言编程中,用来表示小数的有两种类型:
float32(单精度类型,占据4个字节 byte,32个二进制位 bit)
float64(双精度类型,占据8个字节 byte,64个二进制位 bit)
那么,计算机在内存中是如何存储浮点类型的呢?
我们下面就来从计算机中最小的单位 bit (二进制位)方面来详细分析:
我们知道,计算机中的数据,最终都需要转化成二进制数据来存储。
不管什么样的数据(文字、图片、视频、语音)存储到计算机中都会变成 0 1 这样的二进制代码
那么,首先,我们试着用二进制数据来表示一个小数:
转换成以 2 为底的科学计数法:
从上面我们可以观察到,对于任何数来说,表示成二进制科学计数法后,都成以转换成 1.xxx(尾数) * 2 的 n 次方(指数)。
这里需要注意到的一点是,比如上图中的十进制小数0.6,表示成二进制后变成了以1001循环的无限循环小数。
这便是浮点数有精度问题的根源之一