文章目录
- 舍入模式
- 1. 就近舍入
- 2.向0舍入
- 3.远离0舍入
- 4. 向正无穷舍入
- 5. 向负无穷舍入
- 6.向负无穷舍入
- 7. ROUND TO MATH
- 参考资料
舍入模式
为了减小舍入操作对推理结果的精度影响,AI芯片有时会支持多种舍入模型(round mode)供编程人员选择,常见模式如下表,这一点正如cpu对软件编程舍入模式的支持。以2.5为例的舍入来看,不同舍入模式最终的结果会相差+/- 1。
序号 | 模式 | 模式 | IEEE754 |
---|---|---|---|
1 | ROUND | 就近舍入,十进制下的四舍五入 | 支持 |
2 | TO ZERO | 向0舍入, 向数轴零点方向舍入,所以直接截尾即可 | 支持 |
3 | OFF ZERO | 远离0舍入,正数向正无穷舍入,负数向负无穷舍入 | |
4 | UP | 向正无穷舍入 | 支持 |
5 | DOWN | 向负无穷舍入 | 支持 |
6 | ROUND TO EVEN | 舍入到最近的偶数 | |
7 | ROUND TO MATH |
1. 就近舍入
即十进制下的四舍五入。但是也会出现以下几种情况:
多余数字是1001,它大于0.5,故最低位进1。
多余数字是0111,它小于0.5,则直接舍掉多余数字。
多余数字是1000,正好是等于0.5的特殊情况;那么此时最低位为0则舍掉多余位,最低位为1则进位1。
注意这里说明的数位都是指二进制数。因为这是尾数,所以在计算这些二进制和0.5的关系的时候,也即转为10进制的时候,我们用每一位的权重乘以2^(-i)然后求和即可。
四舍五入,当尾数为.5时,远离0方向舍入。
round(2.4)=2, round(2.5)=3, round(2.6)=3;
round(-2.4)=-2, round(-2.5)=-3, round(-2.6)=-3。
2.向0舍入
向0方向舍入。
int(2.5)=2, int(-2.5)=-2。
即朝数轴零点方向舍入,所以直接截尾即可。
3.远离0舍入
远离0方向舍入。
int(2.5)=3, int(-2.5)=-3。
4. 向正无穷舍入
向上(正无穷方向)舍入。
ceil(2.5)=3, ceil(-2.5)=-2。
对正数而言,多余位全为0则直接截尾,不全为0则向最低有效位进1;
对负数而言,不管多余位是多少直接截尾即可。
5. 向负无穷舍入
向下(负无穷方向)舍入。
floor(2.5)=2, floor(-2.5)=-3。
对负数而言,多余位全为0则直接截尾,不全为0则向最低有效位进1;
对正数而言,不管多余位是多少直接截尾即可。
6.向负无穷舍入
当尾数为.5时,向偶数舍入。
round(2.4)=2, round(2.5)=2, round(2.6)=3;
round(-2.4)=-2,round(-2.5)=-2,round(-2.6)=-3。
7. ROUND TO MATH
先加0.5,再向下舍入(down)。
round(2.4)=2, round(2.5)=3, round(2.6)=3;
round(-2.4)=-2,round(-2.5)=-2,round(-2.6)=-3。
参考资料
https://zhuanlan.zhihu.com/p/655670898
https://zhuanlan.zhihu.com/p/676473751
https://blog.csdn.net/qq_39507748/article/details/110219526
https://zhuanlan.zhihu.com/p/458078797