2012-03-16 22 views

Odpowiedz

18

Nie, to nie jest to samo.

Float.MAX_VALUE to największa wartość skończona , którą można przedstawić w postaci float. Nie znajdziesz żadnej wartości większej od tej, poza nieskończonością. Ale możesz wykonywać na nim wszystkie inne operacje.

Float.POSITIVE_INFINITY to, cóż, nieskończoność. Większość operacji obejmujących nieskończoność zakończy się nieskończonością (dodatnią lub ujemną).

Na przykład:

public class Test { 
    public static void main(String[] args) { 
     testOperations(Float.MAX_VALUE); 
     testOperations(Float.POSITIVE_INFINITY); 
    } 

    public static void testOperations(float input) { 
     System.out.println("input: " + input); 
     System.out.println("input/100: " + input/100); 
     System.out.println("input * 100: " + input * 100); 
     System.out.println("-input: " + (-input)); 
     System.out.println(); 
    } 
} 

wyjściowa:

input: 3.4028235E38 
input/100: 3.4028236E36 
input * 100: Infinity 
-input: -3.4028235E38 

input: Infinity 
input/100: Infinity 
input * 100: Infinity 
-input: -Infinity 
+0

Tak więc, w porównaniu do innych pływaków, Float.POSITIVE_INFINITY będzie zawsze większy? – Adam

+2

@Adam: O ile drugi float nie jest "NaN", tak. ('NaN' nie jest ani większy, ani mniejszy niż równy float.) –

+0

Idealny. Dzięki! – Adam

3

Aby odpowiedzieć na to konkretne pytanie:

Natknąłem się na nich szukając wartości większej niż co drugi ruch lub niepowodzenie, z wyjątkiem tego największego. Czy albo spełnia te kryteria?

Tak Float.POSITIVE_INFINITY jest ze swej definicji, jedynym Float, która jest większa niż Float.MAX_VALUE. Jest to jednak szczególny przypadek pod względem interakcji z operacjami matematycznymi.

Z javadoc:

public static final float POSITIVE_INFINITY:

Stała posiadania dodatniego nieskończoność typu float. Jest równa wartości zwróconej przez Float.intBitsToFloat (0x7f800000).

public static final float MAX_VALUE:

Stała posiadających największą wartość dodatnią skończoną typu float, (2-2-23) · 2127. Jest równy szesnastkowym liczbom zmiennoprzecinkowym, literowym 0x1.fffffeP + 127f, a także równy Float.intBitsToFloat (0x7f7fffff).

Więc, jak widać, zgodnie z dosłownym definicji jest to, że POSITIVE_INFINITY jest większa niż MAX_VALUE o jeden bit.

Pod względem użyteczności, POSITIVE_INFINITY zapewnia wartość, którą można wykorzystać do rozpoznawania w inny sposób problematycznych wyrażeń matematycznych. Ten używany w źródle JDK to 1.0f/0.0f. Wynikiem tego wyrażenia jest POSITIVE_INFINITY, co oznacza, że ​​przekroczyłeś górną granicę rozsądnej matematyki i nigdy nie powrócisz. Biorąc pod uwagę dwie stałe: POSITIVE_INFINITY i NEGATIVE_INFINITY, możesz sprawdzić, czy ogólne wyrażenie pozostawiło granice użytecznych zmiennych i czy było to drzwi dodatnie czy ujemne.

MAX_VALUE, z drugiej strony, przedstawia maksymalną wartość, na której można nadal stosować normalne operacje matematyczne. Na przykład MAX_VALUE - 1.0f jest (bardzo nieznacznie) mniejszą liczbą niż MAX_VALUE. POSITIVE_INFINITY - 1.0f, jednak nadal jest POSITIVE_INFINITY.

Powiązane problemy