首先,可以知道运算的真值为: 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 可以看到,和真值比起来,还是有误差这误差是由机器的二进制运算法则所导致的计算机的不可靠性也体现在这些地方.但实际情况下这个误差是可以忍受的. 我觉得和这个主题相关的,可以引出一些法则:如应尽量避免一个很大的数和一个很小的数相加,那样会产生大数吃小数问题;应尽量避免两个相近的数相减;尽量避免很小的数做除数,等等.
◆◆
评论读取中....
请登录后再发表评论!
◆◆
修改失败,请稍后尝试