以下是Matlab命令(MATLAB版本: 8.2.0.701 (R2013b))
format long;
norm([9, 2])
给出
9.219544457292889
其中,
sqrt(9^2+2^2)
给出
9.219544457292887
请注意最后一位小数。这台机器是依赖的吗?这一切为什么要发生?我怎么才能避免呢?
发布于 2014-11-03 19:54:59
这是一个关于如何compare floating point numbers的很好的指南。由于几个原因(误差累积、不同的算法、机器精度等),当应用两种不同的算法时,您可能会得到略有不同的结果,理论上(手动完成)必须返回相同的数字(欢迎使用科学计算!)。
如果在两个结果之间使用相对比较(假设标准结果是正确的),你会得到:
abs(9.219544457292889 - 9.219544457292887) / 9.219544457292889 = 1.9267e-016
这是微不足道的。对于任何实际目的,您都会得到完全相同的结果。
如果你想得到确切的答案,你必须使用Arbitrary-precision库(正如@Divakar在评论部分提到的那样),但是你将付出更高的CPU使用率的代价。
https://stackoverflow.com/questions/26713572
复制相似问题