You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么-(Double.MAX_VALUE)小于Double.MIN_VALUE?与整数表现不同的原因是什么

双精度浮点数和整数的取值定义差异说明

你编写的测试代码如下:

public class test {
    public static void main(String[] args) {

        double num = -Double.MAX_VALUE;
        double num1 = Double.MIN_VALUE;

        if (num < num1)
            System.out.println("num");
        else
            System.out.println("num1");
        
    }
}

核心原因:Double.MIN_VALUE的定义和整数类型的MIN_VALUE完全不同

  • 对于Java中的整数类型(比如int、long),*_MIN_VALUE指代的是该类型能表示的最小负数值,也就是绝对值最大的负数,比如Integer.MIN_VALUE为-2^31,天然小于Integer.MAX_VALUE。
  • 对于双精度浮点数double,Double.MIN_VALUE指代的是该类型能表示的最小正非零值,是一个约等于4.9e-324的正数,仅比0大一点。
  • Double.MAX_VALUE是双精度能表示的最大正数值,约为1.8e+308,-Double.MAX_VALUE就是双精度能表示的最小有限负数值,是一个绝对值极大的负数。

一个绝对值极大的负数,自然远小于接近0的正数,所以代码中num < num1判断成立,输出num,是符合双精度浮点数的IEEE 754标准定义的正常表现。

如果需要获取双精度浮点数的最小负有限值,直接使用-Double.MAX_VALUE即可。

内容的提问来源于stack exchange,提问作者Galz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:15:02