¿Qué significan estos tres valores especiales de coma flotante: infinito positivo, infinito negativo, NaN?

StackOverflow https://stackoverflow.com/questions/1007586

Pregunta

¿Cómo podemos usarlos en nuestros códigos y qué causará NaN (no un número)?

¿Fue útil?

Solución

Esto puede ser una buena referencia si desea obtener más información sobre la flotación números de puntos en Java.

Positivo Infinito es un número positivo tan grande que no se puede representar normalmente. Infinito negativo es un número negativo tan grande que no se puede representar normalmente. NaN significa "No es un número" y resulta de una operación matemática que no produce una división numérica como 0 entre 0.

En Java, las clases Double y Float tienen constantes para representar los tres casos. Son POSITIVE_INFINITY, NEGATIVE_INFINITY y NaN.

Además, considera esto:

double a = Math.pow(10, 600) - Math.pow(10, 600); //==NaN

Matemáticamente, todos pueden ver que es 0. Pero para la máquina, es un "Infinito". - `` Infinito '' (del mismo rango), que de hecho es NaN.

Otros consejos

  • Infinito positivo significa ir al infinito en la dirección positiva - entrar en valores que son cada vez más grandes en magnitud en la dirección positiva.
  • Infinito negativo significa ir al infinito en la dirección negativa - entrar en valores que son cada vez más grandes en magnitud en la dirección negativa.
  • No es un número (NaN) es algo que no está definido, como el resultado de 0/0 .

Y las constantes de la especificación del Flotador clase:

Se puede encontrar más información en la página IEEE-754 en Wikipedia .

Aquí hay un pequeño programa para ilustrar las tres constantes:

System.out.println(0f / 0f);
System.out.println(1f / 0f);
System.out.println(-1f / 0f);

Salida:

NaN
Infinity
-Infinity
  • 1/0 dará como resultado un infinito positivo.
  • 0/0 dará como resultado Nan. Puede usar NaN como cualquier otro número, por ejemplo: NaN + NaN = NaN, NaN + 2.0 = NaN
  • -1/0 resultará en infinito negativo.

Infinito (en java) significa que el resultado de una operación será un número positivo o negativo tan grande que no se puede representar normalmente.

La idea es representar números especiales que pueden surgir naturalmente de operaciones en "normal" números. Podrías ver el infinito (tanto positivo como negativo) como "desbordamiento". de la representación en coma flotante, la idea es que, al menos en algunas condiciones, tener un valor devuelto por una función todavía da un resultado significativo. Todavía tienen algunas propiedades de orden, por ejemplo (por lo que no atornillan las operaciones de clasificación, por ejemplo).

Nan es muy particular: si x es Nan, x == x es falso (esa es realmente una forma de probar nan, al menos en C, nuevamente). Esto puede ser bastante confuso si no está acostumbrado a las peculiaridades de coma flotante. A menos que haga un cálculo científico, diría que hacer que Nan regrese por una operación es un error, al menos en la mayoría de los casos que se me ocurren. Nan puede venir para varias operaciones: 0/0, inf - inf, inf / inf, 0 * inf. Nan tampoco tiene ninguna propiedad de pedido.

Puede usarlos como cualquier otro número:

por ejemplo:

float min = Float.NEGATIVE_INFINITY;
float max = Float.POSITIVE_INFINITY;
float nan = Float.NaN;
  

Positivo Infinito es un número positivo tan grande que no puede ser   representado normalmente. Infinito negativo es un número negativo tan grande   que no se puede representar normalmente. NaN significa "No es un número" y   resulta de una operación matemática que no produce un número -   como dividir 0 entre 0.

esta no es una respuesta completa (o no está lo suficientemente aclarada) - considere esto:

double a = Math.pow(10,600) - Math.pow(10,600); //==NaN

matemáticamente todos pueden ver que es 0. pero para la máquina es un "Infinito". - `` Infinito '' (del mismo orden) bruja es de hecho NaN ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top