如果没有余数,双除法等于整数除法吗?

Chr*_*ris 5 java floating-point jvm

在 JVM 上,两个双精度值之间的除法是否总是产生与整数除法相同的精确结果?

具有以下先决条件:

  • 除法无余数
  • 不除以零
  • x和实际上都y保存整数值。

例如在下面的代码中

double x = ...;
int resultInt = ...;
double y = x * resultInt;
double resultDouble = y / x; // double division
Run Code Online (Sandbox Code Playgroud)

总是resultDouble相等resultInt还是可能会有一些精度损失?

Pat*_*han 3

是的,如果xy都在int范围内,除非除法是-2147483648.0 / -1.0。在这种情况下,双精度结果将匹配整数除法的结果,但不匹配int除法。

如果两个除法输入都在int范围内,则它们都可以精确表示为double。如果它们的比率是整数并且除法不是,则-2147483648.0 / -1.0比率在int范围内,因此可以精确地表示为double。这double是最接近除法结果的值,因此一定是除法结果double

x如果和y是范围之外的整数,则该推理不一定适用int