为什么-(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
相关产品推荐
相关产品推荐

