您认为 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");
}
我没想到 float 的最小值会是正值......找不到它的任何用处。
根据文档浮点型.MIN_VALUE http://docs.oracle.com/javase/6/docs/api/java/lang/Float.html#MIN_VALUE:
一个常量,保存 float 类型的最小正非零值 2-149。它等于十六进制浮点文字 0x0.000002P-126f,也等于 Float.intBitsToFloat(0x1)。
虽然这个名称作为“真正的最小值”存在争议float
is -Float.MAX_VALUE
, 我猜测MIN_VALUE
选择它是为了与其他数字类型保持一致。使用名称MIN_RANGE_VALUE
and MAX_RANGE_VALUE
(或类似的)可能会使差异更加明显。
要理解为什么这是“最小值”,需要了解一点 Java(或IEEE-754 http://en.wikipedia.org/wiki/IEEE_floating_point) 浮点值有效。有了这个洞察力,阅读文档后,很明显Float.MIN_VALUE
is 由浮点数的尾数和指数分量表示的最小非零值。或者最小正数浮点数可以表示的值。
“真正的最小值”是-Float.MAX_VALUE
因为Float.MAX_VALUE
表示浮点数的尾数和指数部分可以表示的最大值。自从sign对于浮点数存储为离散位,这范围限制对于正数和负数都是相同的。
这与 Java(以及大多数 CPU)中整数的工作方式不同:它们使用二进制补码 http://en.wikipedia.org/wiki/Two's_complement。 (一些计算机系统使用离散符号位,称为“补码”,它有两个整数值零:0和-0!)
快乐研究!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)