1. 浮点表示
其中b表示基底,e表示指数,s表示尾数,注意在s的表示过程中,有个隐藏1.同时还有个符号位
从下面这个图可以看出,向上溢出和向下溢出的概念,overflow表示的是数的绝对值超过了最大的表示范围;向下溢出(underflow)表示的是数的绝对值小于最小能表示的范围(除0以外)
2. IEEE浮点数格式
2.1 hp/sp/dp 表示
主要以单精度浮点数为例,1bit符号位,8bit指数位,23bit尾数位。其中指数位表示的指数等于true_exp +bias。23bit尾数位,还需要加上一个隐藏位才是真正的尾数表示。
2.2 特殊数表示
包括0/无穷/subnormal/NaN等。其中可以注意一下尾数范围的表示方法。
3. 基本的浮点运算
3.1 浮点加法
小阶向大阶看齐,指数对齐之后然后进行加减运算。大阶不向小阶看齐的原因是对其运算之后,尾数还得进行移位,指数还得运算。加运算之后,尾数的结果范围是(1, 4), 可能产生进位,指数需要加1;减运算之后,尾数的结果是(0,2), 可能非常接近于0,尾数需要左移动,指数减去尾数前导零。
3.2 浮点乘法
如果两个数都是normal的数,那么s1s2的范围是(1, 4), 归一化之后,指数最多只需要加1,但是如果支持subnormal的数,那么s1s2的范围就是(0, 4),尾数可能有许多前导0,这样尾数就需要左移。
3.3 浮点除法
浮点除法的难点和浮点乘法一样,当两个数都是normal的情况下,s1/s2的结果仍然是normal的,指数相减之后即可处理。但是如果存在subnormal的情况,我们一般会先进行尾数移位,将尾数的范围限制在[1,2)之间,然后进行处理。
3.4 乘累加
乘累加在乘法过程中是不会进行舍入的,也即乘法过程不允许有精度损失
3.5 开根号
先将指数变为偶数,然后再进行开根。
4. 舍入模式
总共有5种舍入模式,四舍五入,向偶数舍入;四舍五入,向奇数舍入