单片机浮点运算有效数字有多少位
答案:2 悬赏:10
解决时间 2021-01-24 05:08
- 提问者网友:低吟詩仙的傷
- 2021-01-23 09:21
单片机浮点运算有效数字有多少位
最佳答案
- 二级知识专家网友:纵马山川剑自提
- 2021-01-23 09:40
首先,可以知道运算的真值为: 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 可以看到,和真值比起来,还是有误差,这误差是由机器的二进制运算法则所导致的,计算机的不可靠性也体现在这些地方.但实际情况下,这个误差是可以忍受的. 我觉得和这个主题相关的,可以引出一些法则:如,应尽量避免一个很大的数和一个很小的数相加,那样会产生"大数吃小数"问题;应尽量避免两个相近的数相减;尽量避免很小的数做除数,等等.
你的问题是一个很好的引例,采用第一种方式(即(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 可以看到,和真值比起来,还是有误差,这误差是由机器的二进制运算法则所导致的,计算机的不可靠性也体现在这些地方.但实际情况下,这个误差是可以忍受的. 我觉得和这个主题相关的,可以引出一些法则:如,应尽量避免一个很大的数和一个很小的数相加,那样会产生"大数吃小数"问题;应尽量避免两个相近的数相减;尽量避免很小的数做除数,等等.
全部回答
- 1楼网友:逃夭
- 2021-01-23 10:36
我暂时保留我的看法!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯