2012-03-16 9 views

Respuesta

18

No, no son lo mismo en absoluto.

Float.MAX_VALUE es el mayor valor finito que se puede representar en un float. No encontrará ningún valor mayor que ese, que no sea infinito. Pero puede realizar todo tipo de otras operaciones en él.

Float.POSITIVE_INFINITY es, así, el infinito. La mayoría de las operaciones que involucran un infinito terminarán con infinito (ya sea positivo o negativo).

Por ejemplo:

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

Salida:

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

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

Entonces, en comparación con cualquier otro Float, Float.POSITIVE_INFINITY siempre será mayor? – Adam

+2

@ Adam: A menos que el otro flotador sea 'NaN', sí. ('NaN' no es mayor que ni menor que igual a cualquier flotante). –

+0

Perfecto. ¡Gracias! – Adam

3

Para responder a su pregunta específica:

Me encontré con ellos buscando un valor que fuera mayor que cada dos flotantes o en su defecto todos menos el más grande. ¿Cumple cualquiera de los criterios ?

Sí, Float.POSITIVE_INFINITY es, por definición, la única Float que es mayor que Float.MAX_VALUE. Sin embargo, es algo así como un caso especial en términos de cómo interactúa con las operaciones matemáticas.

Desde el javadoc:

public static final float POSITIVE_INFINITY:

Una constante que sostiene el infinito positivo de tipo float. Es igual a el valor devuelto por Float.intBitsToFloat (0x7f800000).

public static final float MAX_VALUE:

Una constante que sostiene el mayor valor positivo finito de tipo flotador, (02/02/23) · 2127. Es igual al literal de coma flotante hexadecimal 0x1.fffffeP + 127f y también igual a Float.intBitsToFloat (0x7f7fffff).

Por lo tanto, como se puede ver, de acuerdo con la definición literal es que POSITIVE_INFINITYMAX_VALUE es mayor que en un bit.

En términos de su utilidad, POSITIVE_INFINITY proporciona un valor que puede usar para reconocer expresiones matemáticas que de otro modo serían problemáticas. El utilizado en la fuente JDK es 1.0f/0.0f. El resultado de esta expresión es POSITIVE_INFINITY, lo que indica que ha excedido el límite superior de las matemáticas razonables, que nunca regresará. Dadas las dos constantes POSITIVE_INFINITY y NEGATIVE_INFINITY, puede verificar si una expresión general ha salido de los límites de los Flotantes útiles y si fue la puerta positiva o negativa.

MAX_VALUE, por otro lado, representa el valor máximo en el que aún puede aplicar operaciones matemáticas normales. Por ejemplo, MAX_VALUE - 1.0f es un número (muy ligeramente) más pequeño que MAX_VALUE. POSITIVE_INFINITY - 1.0f, sin embargo, sigue siendo POSITIVE_INFINITY.

Cuestiones relacionadas