51单片机 c语言小数计算,51单片机怎么实现浮点运算

246d1315c9231f28307ae2a958afa5c7.png

首先,可以知道运算的真值为: trueval=0.000023371258+33.678429+(-33.677811)=0.000641371258=6.41371258*10^(-4) F(10,8,L,U)这种表达法我还没见过,但我的理解是:十进制,八位浮点运算,无符号Long型,不知道正确不? 你的问题的真正意义是不是要问如何设计一个数据稳定且精度高的算法,使计算结果能够最大限度的接近真值?关于计算方法是有一些普遍原则的.如果计算的数据超过了计算机所能支持的运算的最大精度那么算出的结果也只是一个近似值很多工程中涉及到的科学计算便是如此,解决的办法便是优化算法或采用具有更高计算精度的计算机.

你的问题是一个很好的引例,采用第一种方式(即(x+y)+z)的计算结果为: result_1 = 6.413712579984576e-004 采用第二种方式(即x+(y+z))得出的结果为: result_2 = 6.413712579957885e-004 这是在MATLAB下进行单精度浮点运算得到的结果可以看出result_1的精度更高. 如果进行双精度运算,得出的结果为: result1 =

6.413712580055631e-004

resutl2 =

6.413712580028940e-004 可以看到,和真值比起来,还是有误差这误差是由机器的二进制运算法则所导致的计算机的不可靠性也体现在这些地方.但实际情况下这个误差是可以忍受的. 我觉得和这个主题相关的,可以引出一些法则:如应尽量避免一个很大的数和一个很小的数相加,那样会产生大数吃小数问题;应尽量避免两个相近的数相减;尽量避免很小的数做除数,等等.

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值