使用规范时的Matlab精度

时间:2014-11-03 11:43:36

标签: matlab precision

以下Matlab命令(MATLAB版本:8.2.0.701(R2013b))

format long;
norm([9, 2])

给出

9.219544457292889

其中,

sqrt(9^2+2^2)

给出

9.219544457292887

注意最后一个小数位。这台机器是否依赖?为什么会这样?我怎么能避免它?

1 个答案:

答案 0 :(得分:1)

这是关于如何compare floating point numbers的良好指南。由于几个原因(错误的累积,不同的算法,机器精度等),当应用两种不同的算法时,你可能得到稍微不同的答案,理论上(手工完成)必须返回相同的数字(欢迎科学计算!)。

如果在两个结果之间使用相对比较(假设标准结果是正确的),你得到:

abs(9.219544457292889 - 9.219544457292887) / 9.219544457292889 =  1.9267e-016

这是微不足道的。出于任何实际目的,您将得到完全相同的结果。

如果您想获得确切的答案,您必须使用Arbitrary-precision库(在评论部分中提及@Divakar),但您将支付更高CPU使用率的代价。