Ily*_*man 6 java floating-point
您认为Float.MIN_VALUE等于什么?
下一个代码解释了我过去5个小时的去向,尝试解决一个错误.
public static void main(String[] args) {
compareToZero(Float.MIN_VALUE); // Out = true false false
compareToZero(Float.MAX_VALUE); // Out = true false false
System.out.println("Float minimum " + Float.MIN_VALUE); // Out = 1.4E-45
System.out.println("Float maximum " + Float.MAX_VALUE); // Out = 3.4028235E38
}
private static void compareToZero(float value1) {
System.out.print((value1 > 0) + " ");
System.out.print((value1 < 0) + " ");
System.out.print((value1 == 0) + "\n");
}
Run Code Online (Sandbox Code Playgroud)
我没想到浮点数的最小值将是正值...找不到任何用途.
小智 17
根据Float.MIN_VALUE的文档:
保持float类型的最小正非零值的常量,2-149.它等于十六进制浮点字面值0x0.000002P-126f,也等于Float.intBitsToFloat(0x1).
虽然名称是值得商榷的"真正的最小值"的float是-Float.MAX_VALUE,我怀疑MIN_VALUE被选中的一致性与其他数字类型.使用名称MIN_RANGE_VALUE和MAX_RANGE_VALUE(或类似)可能会使差异更加清晰.
要理解为什么这是"最小值",需要了解Java(或IEEE-754)浮点值的工作原理.有了这种认识,阅读文档后,很明显,Float.MIN_VALUE是通过一个浮动的尾数和指数成分的最小非零值表示的.或者,float可以表示的最小正值.
"真实最小值"是-Float.MAX_VALUE因为Float.MAX_VALUE表示浮点数的尾数和指数分量可以表示的最大值.由于浮点的符号存储为离散位,因此正数和负数的范围限制相同.
这与整数在Java(以及大多数CPU)中的工作方式不同:它们使用二进制编码进行编码.(有些计算机系统使用离散符号位,称为"一个补码",然后有两个整数值为零:0和-0!)
快乐的研究!