笔者:YY同学
定点与浮点
- 定点(Fixed Point)
所谓定点就是一个固定小数点位置的表达形式,比如 3.14 ,0.618。用这种方法表示的 小数(fractional) 比较直观易懂,但是不利于表示非常大或者非常小的小数。
- 浮点(Floating Point)
然而在计算机中,我们表示的小数的范围需要具有一定的灵活性,因此我们采用了科学计数法(SEM,一般是二进制),将小数分成三块分别进行存储。
单精度浮点数组成
单精度一般是 32bits,其中第1位表示 符号(sign), 中间8位表示 指数大小(exponent),最后23位则表示 正规化之后的小数尾数(Mantissa)
转化步骤
- 正规化(Normalize)
先将整数和小数部分分别转化为二进制,整数部分除二取余从右往左排,小数部分乘二取整从左往右排,然后写在一起。
- 移位
将小数点左移至第一位后面,然后乘2的移位次方。
− 1011. 1 2 = − 1.0111 ∗ 2 3 -1011.1_2 = -1.0111 * 2^3 −1011.12=−1.0111∗23
- 分别计算SEM(记得都转成二进制)
S 代表符号,负数为1,正数为0。例子中为负数因此 S = 1
E 代表指数大小 + 偏移量(bias),单精度下 bias = 127。因此 E = 3 + 127 = 130 = 10000010
M 仅代表小数尾数,M = 01110000000000000000000
因此最后的计算结果为SEM的组合:
− 11. 5 10 = 1100000100111000000000000000000 0 2 = 0 x C 1380000 -11.5_{10} = 11000001001110000000000000000000_2 = 0xC1380000 −11.510=110000010011100000000000000000002=0xC1380000
表示范围
S 的值仅为 0 或 1
E 最小为 00000001 = 1,最大为 11111110 = 254
M 最小为 00000000000000000000000,最大为 11111111111111111111
量级(Magnitude)范围 1.8 ∗ 1 0 − 38 1.8*10^{-38} 1.8∗10−38 ~ 3.4 ∗ 1 0 38 3.4*10^{38} 3.4∗1038
整体范围 − 3.4 ∗ 1 0 38 -3.4*10^{38} −3.4∗1038 ~ − 1.8 ∗ 1 0 − 38 -1.8*10^{-38} −1.8∗10−38, 1.8 ∗ 1 0 − 38 1.8*10^{-38} 1.8∗10−38 ~ 3.4 ∗ 1 0 38 3.4*10^{38} 3.4∗1038
特殊表示
- 全0:0
- E全为1,M全为0:+∞ / -∞
- E全为1,M为非0:不是一个数字(NaN)
- E全为0,M为非0:未被正规化的数字