在 JVM 上,两个 double 值之间的除法是否总是产生与整数除法完全相同的结果?

具有以下先决条件:

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

  • 例如。在下面的代码中
    double x = ...;
    int resultInt = ...;
    double y = x * resultInt;
    double resultDouble = y / x; // double division
    
    resultDouble 总是等于 resultInt 还是会损失一些精度?

    最佳答案

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

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

    如果 xyint 范围之外的整数,则此推理不一定适用。

    10-07 19:31
    查看更多