3676|0

1万

帖子

25

TA的资源

裸片初长成(高级)

楼主
 

关于MEINVF32指令精度的讨论 [复制链接]

MEINVF32指令,是C2000系列中使用的CLA模块的指令,它独立于C28 CPU。
     CLA计算浮点数时,它的运算指令是单周期的,并且在乘、加等指令上设有并行指令。相当于一个时钟周期执行两条指令。


      MEINVF32指令完成32位的浮点数的倒数运算。然而,手册中提出它是一种近似运算,精度只能保证8位。并提示可以由牛顿-拉弗森算法(Newton-Raphson algorithm)来求得更精确的值。
             Ye = Estimate(1/X);
             Ye = Ye*(2.0 - Ye*X);
             Ye = Ye*(2.0 - Ye*X);

在它的举例中提供了这样一段程序:


             ; Calculate Num/Den using a Newton-Raphson algorithum for 1/Den
             ; Ye = Estimate(1/X)
             ; Ye = Ye*(2.0 - Ye*X)
             ; Ye = Ye*(2.0 - Ye*X)
;
             _Cla1Task1:
             MMOV32 MR1, @_Den           ; MR1 = Den
             MEINVF32 MR2, MR1           ; MR2 = Ye = Estimate(1/Den)
             MMPYF32 MR3, MR2, MR1      ; MR3 = Ye*Den
             MSUBF32 MR3, #2.0, MR3      ; MR3 = 2.0 - Ye*Den
             MMPYF32 MR2, MR2, MR3      ; MR2 = Ye = Ye*(2.0 - Ye*Den)
             MMPYF32 MR3, MR2, MR1       ; MR3 = Ye*Den
             MSUBF32 MR3, #2.0, MR3     ; MR3 = 2.0 - Ye*Den
             MMPYF32 MR2, MR2, MR3      ; MR2 = Ye = Ye*(2.0 - Ye*Den)



现在做一个实验,拿一个数: 1.2 , 求它的倒数( 1/1.2 = 0.833333333333)在MEINVF32 指令下所得的值,并且使用牛顿法逼近。


        MMOVF32                MR0, #1.2                ; X
        MEINVF32        MR2, MR0                ; Ye = Estimate(1/X); = 0.8359375
        MMPYF32                MR0, MR2, MR0        ; Ye*X;
        MSUBF32                MR3, #2.0, MR0        ; (2.0 - Ye*X);
        MMPYF32                MR1, MR3, MR2        ; Ye = Ye*(2.0 - Ye*X);= 0.8333252

        MMPYF32                MR2, MR1, MR0        ; Ye*X;
        MSUBF32                MR3, #2.0, MR2        ; (2.0 - Ye*X);
        MMPYF32                MR0, MR3, MR1        ; Ye = Ye*(2.0 - Ye*X); = 0x3F555553




经运行后观察寄存器的值,在执行MEINVF32        MR2, MR0后,1.2的倒数约为0.8359375

          经第一次牛顿法逼近,得 0.8333252
          经第二次牛顿法逼近,得(浮点表示) 0x3F555553,(十进制约0.8333331)




 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表