目录
在IEEE754浮点数标准,提供了两种基本浮点格式,32位单精度格式和64位双精度格式,格式如下:
下面我以32位单精度格式为例子,分别解释规格数、非规格数、特殊数
一、介绍32位单精度格式
如上图:以32位浮点数为例, 其内存状态分为3部分:1位符号位 8位阶码 23位尾数
尾数用原码表示,阶码用移码表示,偏置常数是127
浮点是的取值范围:
对应图:
二、介绍几种数的区别
形如阶码为00000000的数,即8位阶码全为0, 就代表当前数是个非规格数
形如阶码为11111111的数,即8位阶码全为1, 就代表当前数是个特殊数
如果既不是非规格数,也不是特殊数,那它就是规格数(阶码不全为0, 也不全为1)
(下面会解释)
三、 规格数
作用:
用于表示最常见的数值:像3.1415、141615、2.11等
格式:
符号位, 1位: 可正可负
阶码位, 8位: 不全为0且不全为1
尾数位, 23位: 尾数位前隐藏的整数部分是1. 而非 0.(后面会解释)
对于32位浮点数来说, 规格数的阶码位的取值范围是[1, 254], 偏置bias是127, 所以阶是:[-126, 127]
阶码 = 偏置常数 + 阶
所以我们可以知道尾数位的取值范围(二进制表示)是
[1.00000000000000000000000, 1.11111111111111111111111]
换算成10进制为 [1,2)
意义:
无法表示 0 和 及其靠近0 的数
why:规格数的取值范围是
这个数始终大于0, 即便2^-167非常小, 但还是大于0,那么: 一个始终大于1的数 * 一个始终大于0的数, 永远无法等于0,也就是说: 使用规格数时, 我们除了无法表示0, 也无法表示(0, 2^-167)之间的, 靠近0的极小数...