Java - 一次双加/减的最大精度损失

Bob*_*r02 7 java double double-precision floating-point-precision

是否有可能建立甚至粗略地说明在处理doublejava中的两个值(加/减)时最大精度损失是多少?可能最坏的情况是两个数字无法准确表示,然后对它们执行操作,这导致一个也无法准确表示的值.

Mar*_*ers 7

最糟糕的情况是所有精度都可能丢失.例如,如果结果大于最大可表示的有限数,则会发生这种情况.然后它将存储为POSITIVE_INFINITY(或NEGATIVE_INFINITY).

关于您的更新,可以添加.

double a = Double.MAX_VALUE;
System.out.println(a);
double b = a + a;
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)

结果:

1.7976931348623157E308
Infinity
Run Code Online (Sandbox Code Playgroud)

在线查看:ideone

通常,表示错误的大小与您的数字大小有关.


Cep*_*pod 5

看看Math.ulp(double).该ULPdouble是增量到下一个最高值.例如,如果您添加到数字而一个小于另一个的ulp,则您知道添加将不起作用.如果乘以两个双精度数,则可以将它们的ulps相乘以得到结果的最大误差.