RISC-V MCU中文社区

【分享】 (六):浮点舍入模式介绍

发表于 全国大学生集成电路创新创业大赛 2023-05-21 13:35:16
0
2141
2

一、团队介绍

报名编号:CICC1327
团队名称:301小队

二、浮点舍入模式

为什么要舍入? 因为单精度浮点数只取23位尾数(除去隐藏位),而一些运算不可避免的得到的尾数会超过23位,因此需要考虑舍入。

根据 IEEE-754 标准, 浮点数运算需要指定舍入模式(Rounding Mode), RISC-V 架构浮点运算的舍入模式可以通过两种方式指定。
(1)静态舍入模式:浮点指令的编码中有3位作为舍入模式域,RISC-V架构支持五种合法的舍入模式。除此之外,如果舍入模式编码为101或者110 ,则为非法模式;如果舍入模式编码111 ,则意味着使用动态舍入模式。

并不是所有的指令都有舍入模式,根据指令编码格式,以下的指令存在舍入模式的:

浮点运算指令: fadd fsub fmul fdiv fsqrt
浮点乘加指令:fmadd fmsub fnmadd fnmsub
浮点转换指令:fcvt.w.s fcvt.s.w fcvt.uw.s fcvt.s.uw

(2)动态舍入模式:如果使用动态舍入模式,则使用fcsr寄存器中的舍入模式域。fcsr 寄存器包含舍入模式域。不同的舍入模式编码同样下图所示,仅支持五种合法的舍入模式。如果 fcsr 寄存器中的舍入模式域指定为非法的舍入模式,则后续浮点指令会产生非法指令异常。

1、RNE

最近舍入,向偶数舍入 :如果舍入的数超过0.5,则尾数加1,小于0.5,直接舍去。如果等于0.5,向偶数舍入,即得到的尾数的最后一位为0,是偶数,则舍去,如果为1,则加1。

假定需要舍入的尾数为4位
如果其值小于1000,则最终得到的尾数不变,直接舍去;
如果其值大于1000,则最终得到的尾数需要加1;
如果其值为1000,且得到的尾数最后1位为0意味着为偶数,直接舍去,得到的尾数最后1位为1,则最终得到的尾数需要加1,使其变为偶数。

2、RTZ

向0舍入:向靠近0的方向舍入,无论需要舍入的尾数为多少,直接舍去。

3、RDN

向负无穷舍入:对于正数,无论需要舍入的尾数为多少,直接舍去;对于负数,如果需要舍入的尾数不为0,向负无穷舍入意味着需要加1。

4、RUP

向正无穷舍入:对于负数,无论需要舍入的尾数为多少,直接舍去;对于正数,如果需要舍入的尾数不为0,向负无穷舍入意味着需要加1。

5、RMM

最近舍入,向最大量级舍入:如果需要舍入的尾数大于0.5,则加1,否者舍去。

喜欢2
用户评论
星河

星河 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板