您第二个问题的答案是否定的。有限机器精度误差的大小可以任意大:
public static void main(String[] args) { double z = 0.0; double x = 0.23; double y = 1.0 / x; int N = 50000; for (int i = 0; i < N; i++) { z += x * y - 1.0; } System.out.println("z should be zero, is " + z);}
这给出
~5.55E-12,但是如果您增加
N,则可能会得到所需的几乎任何级别的错误。
关于如何编写数值稳定算法,过去和现在都有大量研究。这是一个难题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)