在 JVM 上,两个 double 值之间的除法是否总是产生与整数除法完全相同的结果?
具有以下先决条件:
x
和 y
实际上都保存整数值。 例如。在下面的代码中
double x = ...;
int resultInt = ...;
double y = x * resultInt;
double resultDouble = y / x; // double division
resultDouble
总是等于 resultInt
还是会损失一些精度? 最佳答案
是的,如果 x
和 y
都在 int
范围内,除非除法是 -2147483648.0 / -1.0
。在这种情况下,double 结果将匹配整数除法的结果,但不匹配 int
除法。
如果两个除法输入都在 int
范围内,则它们都可以完全表示为 double
。如果它们的比率是整数并且除法不是 -2147483648.0 / -1.0
,则比率在 int
范围内,因此可以完全表示为 double
。那 double
是最接近除法结果的值,因此必须是 double
除法的结果。
如果 x
和 y
是 int
范围之外的整数,则此推理不一定适用。