以下Matlab命令(MATLAB版本:8.2.0.701(R2013b))
format long;
norm([9, 2])
给出
9.219544457292889
其中,
sqrt(9^2+2^2)
给出
9.219544457292887
注意最后一个小数位。这台机器是否依赖?为什么会这样?我怎么能避免它?
答案 0 :(得分:1)
这是关于如何compare floating point numbers的良好指南。由于几个原因(错误的累积,不同的算法,机器精度等),当应用两种不同的算法时,你可能得到稍微不同的答案,理论上(手工完成)必须返回相同的数字(欢迎科学计算!)。
如果在两个结果之间使用相对比较(假设标准结果是正确的),你得到:
abs(9.219544457292889 - 9.219544457292887) / 9.219544457292889 = 1.9267e-016
这是微不足道的。出于任何实际目的,您将得到完全相同的结果。
如果您想获得确切的答案,您必须使用Arbitrary-precision库(在评论部分中提及@Divakar),但您将支付更高CPU使用率的代价。