【问题标题】:Java Math.min() Error on Integer.Max_ValueInteger.Max_Value 上的 Java Math.min() 错误
【发布时间】:2013-09-18 03:36:46
【问题描述】:

这段代码应该返回两个数字中较小的一个,它返回一个类似于较大数字的负数:

Math.min(15, 21474836477) --> returns -2147483642

我怀疑这与int's 的范围有关,所以我将值更改为long,程序运行正常。

我不太明白它返回的看似随机的数字 - 为什么它是 -2147483643 而不是我输入的实际数字 -21474836477?差异是由于溢出量造成的,还是受到 Math.min 其他参数的某种影响?

【问题讨论】:

标签: java


【解决方案1】:

规定的结果 -2147483642 是 5-Integer.MAX_VALUE 和 7+Integer.MAX_VALUE。我怀疑 Math.min 参数实际上是那个值,可能是由于对其中一个表达式的评估而产生的。很负,肯定小于15。

这个程序:

public class Test {
  public static void main(String[] args) {
    System.out.println(Math.min(15, Integer.MAX_VALUE));
    System.out.println(Math.min(15, 7+Integer.MAX_VALUE));
    System.out.println(Math.min(15, 5-Integer.MAX_VALUE));
  }
}

输出:

15
-2147483642
-2147483642

【讨论】:

    【解决方案2】:

    这个

    Math.min(15, 21474836477) 
    

    不可能返回

    -2147483642
    

    代码本身不会编译,因为整数文字 21474836477int value range 之外。

    你可能跑了

    Math.min(15L, 21474836477L) 
    

    在这种情况下,您将运行重载的Math.min(long, long) 方法。

    【讨论】:

      【解决方案3】:

      Math.min 被重载,如下所示。

      静态双最小(双a,双b) 返回两个双精度值中较小的一个。 静态浮动最小值(浮动 a,浮动 b) 返回两个浮点值中较小的一个。 静态 int min(int a, int b) 返回两个 int 值中较小的一个。 静态 long min(long a, long b) 返回两个 long 值中较小的一个。

      因此,您甚至可以将它与长值一起使用,例如

                long x = 98759765l;
            long y = 15428764l;
      
            // print the smaller number between x and y
            System.out.println("Math.min(" + x + "," + y + ")=" + Math.min(x, y));
      

      但是,你的远距离也超出了范围

      【讨论】:

        猜你喜欢
        • 2015-05-12
        • 1970-01-01
        • 2013-02-24
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        • 2018-09-23
        • 2010-10-25
        • 2013-03-14
        相关资源
        最近更新 更多