2011-08-15 214 views
15

以下question表示Double的最小值为-Double.MAX_VALUE。这对于Float也是如此(即,-Float.MAX_VALUE)?Java中Float的最大值是多少?

+1

您的意思是-Float.MAX_VALUE? – dckrooney

+1

为什么[this](http://download.oracle.com/javase/6/docs/api/java/lang/Float.html#MIN_VALUE)不正确? – CoolBeans

+1

@CoolBeans阅读他的相关问题;他在谈论“最大幅度的负数”。 – dlev

回答

20

是的,-Float.MAX_VALUE是最大幅度的负数。 float s与double相同,仅存储空间的一半(以及随之而来的精度损失)。由于IEEE 754中的符号由单个位表示,所以翻转该位不会改变可由剩余的位。

15

是 - 它是相同的位模式Float.MAX_VALUE除了符号位翻转......这是另一种方式来获得的值:

public class Test { 
    public static void main(String[] args) { 
     // Float.MAX_VALUE is intBitsToFloat(0x7f7fffff) 
     // so we set the most significant bit - the sign bit 
     float f = Float.intBitsToFloat((int) 0xff7fffff); 
     System.out.println(f == -Float.MAX_VALUE); // true 
    } 
} 
1

是的,并且与链接问题的回答中所述的原因完全相同,Floats和Doubles使用IEEE754表示,由于存储方式“对称”。

7

编辑:我原来的答案似乎是非常不正确的。感谢@aioobe指出这一点。

相反,使用Java代码的魔法来回答标题问题:

System.out.printf("Float.MAX_VALUE: %,f\n", Float.MAX_VALUE); 

Float.MAX_VALUE:340,282,346,638,528,860,000,000,000,000,000,000,000.000000

System.out.printf("in scientific notation: %.18g\n", Float.MAX_VALUE); 
在科学记数法

:3.40282346638528860e + 38

System.out.printf(
      "in hexadecimal floating-point number with a significand and " 
      + "an exponent: %a", Float.MAX_VALUE); 

中的十六进制浮点数用as ignificand和指数:0x1.fffffep127

相关问题