2011-08-15 41 views
15

Następująca question wskazuje, że minimalna wartość opcji Double to -Double.MAX_VALUE. Czy jest to również prawdziwe w przypadku Float (tj. -Float.MAX_VALUE)?Maksymalna wartość Float w Java?

+1

Czy masz na myśli -Float.MAX_VALUE? – dckrooney

+1

Dlaczego nie [this] (http://download.oracle.com/javase/6/docs/api/java/lang/Float.html#MIN_VALUE) może być prawdziwe? – CoolBeans

+1

@CoolBeans przeczytaj powiązane pytanie; on mówi o "liczbie ujemnej o największej wielkości". – dlev

Odpowiedz

20

Tak, -Float.MAX_VALUE jest liczbą ujemną o największej wartości. float s są reprezentowane w taki sam sposób jak double s, tylko z połową pamięci (i towarzyszącą utratą precyzji). Ponieważ znaki w IEEE 754 są reprezentowane przez pojedynczy bit, przerzucenie tego bitu nie zmienia ogólnej wielkości osiągalnej przez pozostałe bity.

15

Tak - to jest ten sam wzór bitowy jako Float.MAX_VALUE z wyjątkiem bitu znaku przewracanej ... i to kolejny sposób, aby dostać się na wartość:

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

Tak, z dokładnie tego samego powodu, co w odpowiedzi na pytanie, które łączyłeś, Floats and Doubles używają reprezentacji IEEE754, która jest "symetryczna" ze względu na sposób, w jaki są przechowywane.

7

EDYCJA: Moja oryginalna odpowiedź wydaje się być bardzo niepoprawna. Dziękujemy @ aioobe za wskazanie tego.

Zamiast tego, korzystając z magii kodu Java, aby odpowiedzieć na tytułowe pytanie:

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); 

w notacji naukowej: 3.40282346638528860e + 38

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

w szesnastkowym numerze zmiennoprzecinkowym z ignificand i wykładnik: 0x1.fffffep127

Powiązane problemy