IEEE 754定义了浮点数的表示方法和运算方法
表示方法
单精度浮点数
32位,分为:
一位符号位sign
==S==
八位指数位exponent
==E==,称为阶码
23位小数位fraction
==M==
其中定义了偏置量bias
=$2^{e-1}-1$,其中e是指数位的位数,在单精度浮点数中,为$2^7-1=127$
小数值的计算公式为:
$(-1)^SM2^{E-bias}$ 因为E为全0和全1是特殊情况 ==所以指数的范围是-126~127==
下面进行分类讨论:
格式化数值 阶码不全为0也不全为1
M等于小数位前补1,例如fraction位为1101,那么实际的M为$1.1101_2$
bias按照上面的公式计算
非格式化数值 阶码全为0,但是小数位不全为0
此时指数为1-bias而不是E-bias,这样可以使数字平滑过渡 M前不补1
特殊值
- 阶码全为0,小数位全为0 为0,有正负之分,由符号位决定
- 阶码全为1,小数位全为0 无穷大,有正负之分,由符号位决定
- 阶码全为1,小数位不全为0 NaN->非数字
双精度浮点数
规则同上
符号位1位 指数位11位 小数位52位
bias=$2^{10}-1=1023$ 指数范围: -1023~1024
计算
加法
- 指数小的数 将 指数与大的位数 对齐(指数对齐) -> 舍弃超出表示范围的位 -> ==这样保证小数位在最高位和次高位之间,且保持较高的精度==
- 有效小数位相加
- 移位到科学计数法表示(数字左规/右规)
- 检查指数位是否溢出
- 舍入到有效数位
==过程中小数可能由于移位导致丢失==
乘法
- 指数相加,或者==E值相加后减去偏置量==(底层是指数位相加减去偏置量)
- 有效小数位相乘
- 移位到科学表示,检查溢出
- 舍入
- 判断符号(整数运算符号位参与运算,浮点数符号位不参与)
舍入规则
都建立在==保留到第几位==,也就是保留几位小数的概念基础之上
向上舍入
不论小数部分为多少,向正无穷方向舍入
向下舍入
与向上舍入相反
向零舍入
正数向下,负数向上
向偶数舍入(默认的舍入方式)
为什么?
总是向一个方向舍入会导致数值偏大或偏小,造成统计学误差
而向偶数舍入保证在一半时间内偏大而另一半时间内偏小
具体内容?
==什么是中间值==
在需要保留到的小数位之后的一位是1,1后全为0 eg.保留到小数点后3位,则下面的为中间值 10.010 100 10.011 100 10.110 100 也就是说,对于一个小数XXXXX.YYYYYY100000…,最右边的Y是需要保留到的位数,只有这样的小数才是中间值
==具体内容==
若不是中间值,则向最近的数值舍入 若为中间值,则向偶数舍入
Why bias?
使指数位可以用无符号数解释 便于硬件进行指数位比较大小和计算等操作