浮点数的二进制底层表示
同整数的二进制底层表示,浮点数也是2的幂的加权。
对于二进制比特串
[bm,bm−1...b2,b1,b0,b−1,b−2,b−3....b−n−1,b−n]
表示
float number=∑i=−nmbi∗2i
因为只能表示为2的幂的加权,所以这种表示形式就有很大的漏洞,那就是任何一个浮点数只能近似的表示。
早期各个计算机制造公司对于浮点数的底层解释不同,这就意味着移植性很差没有统一标准。为了方便,制定了 IEEE Standard 754 标准,现在的绝大部分机器都使用这种标准。
IEEE浮点数标准
IEEE浮点数标准使用32位bit表示单精度浮点数 (float) ,64位bit表示双精度浮点数 (double) 。
它们在机器中表示如下 :
看图片我们可以知道,无论是单精度还是双精度,都分成了三个部分:
- sign : 符号位,sign为1表示负数,为0表示正数
- exponent : 单精度8位(23-30),双精度11位(52-62)。表示一个权重,是2的幂的加权形式。
- frac : n位frac 编码尾数位M。尾数M是一个二进制的小数,它的范围是 1 to 2−ϵ 或者是 0 to 1−ϵ
这里解释一下 1−ϵ ,对于小数 1.0 ,假如说用 6 位比特来表示,那么最多只能表示到
一个给定的比特串,根据
Normalized Values(规范化数值)
这是最为常见的值。
当 exp