nikon mundo mejores mejor fotograficas einfiniti chile camaras camara java nan infinity

java - mundo - mejores camaras fotograficas 2018



¿Cómo se almacenan en la memoria NaN e Infinity de un flotante o doble? (5)

Como se describe en Wikipedia , el exponente con todos los bits establecidos en 1 se usa para identificar esos números. El campo de fracción establecido en 0 se usa para identificar el infinito (positivo o negativo, identificado por el signo), y un campo de fracción distinta de cero identifica un valor de NaN.

Según entiendo, java almacenará un flotador en la memoria como un entero de 32 bits con las siguientes propiedades:

  • El primer bit se usa para determinar el signo
  • Los siguientes 8 bits representan el exponente
  • Los 23 bits finales se usan para almacenar la fracción

Esto no deja bits de repuesto para los tres casos especiales:

  • Yaya
  • Infinito positivo
  • Infinito Negativo

Adivino que el 0 negativo podría usarse para almacenar uno de estos.

¿Cómo se representan realmente en la memoria?


Desde here :

P. ¿Cómo se representan el cero, infinito y NaN usando IEEE 754?

A. Configurando todos los bits de exponente a 1. Infinito positivo = 0x7ff0000000000000 (todos los bits de exponente 1, bit de signo 0 y todos los bits de mantisa 0), infinito negativo = 0xfff0000000000000 (todos los bits de exponente 1, bit de signo 1 y todos los bits de mantisa 0) , NaN = 0x7ff8000000000000 (todos los bits de exponente 1, al menos un conjunto de bits de mantisa). Positivo cero = todos los bits 0. Negativo cero = todos los bits 0, excepto el bit de signo que es 1.

Consulte también los Javadocs sobre NAN, Positive Infinity e Negative Infinity .


En primer lugar, tenemos que aprender cómo el número se representa como el punto flotante y el doble en la memoria.

El número general es de la forma: 1.M * 2 ^ e.

(donde la M se llama mantisa y la e es el exponente en el exceso-127)

En punto flotante

El MSB (bit más significativo) se utiliza como bit de signo y el número de bit de 23 a 31 se usa para el valor exponencial en forma de exceso-127 y el número de bit de 0 a 30 se usa para almacenar la mantisa.

En doble

El MSB (bit más significativo) se utiliza como bit de signo y el número de bit de 52 a 63 se utiliza para el valor exponencial en forma de exceso-127 y el número de bit de 0 a se utiliza para almacenar la mantisa.

así que ahora estamos en posición de entender la representación de NaN, Infinito en el flotante o doble.

NaN (no es un número)

En la representación del NaN, todos los bits del Exponente son 1 y los bits de Mantissa pueden ser cualquier cosa y no importa que estén en coma o decimal.

infinito

En la representación del Infinito, todos los bits del Exponente son 1 y los bits de Mantissa son 0 y no importa que estén en coma o decimal. El infinito positivo se representa exactamente igual que el anterior, pero el bit de signo es 0 y el infinito negativo se representa también con el mismo signo, pero el bit de signo está aquí 1.


Java especifica que los números de punto flotante siguen el estándar IEEE 754 .

Así es como está almacenado:

  • bit 0: bit de signo
  • bits 1 a 11: exponente
  • bits 12 a 63: fracción

Ahora, he ejecutado el siguiente método con diferentes valores dobles:

public static void print(double d){ System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(d))); }

Ejecuté con estos valores:

print(Double.NaN); print(Double.NEGATIVE_INFINITY); print(Double.POSITIVE_INFINITY); print(-Double.MAX_VALUE); print(Double.MAX_VALUE);

Y obtuvo el siguiente resultado para los valores anteriores (formateados para la legibilidad):

NaN: 0111111111111000000000000000000000000000000000000000000000000000 -Inf: 1111111111110000000000000000000000000000000000000000000000000000 +Inf: 0111111111110000000000000000000000000000000000000000000000000000 -Max: 1111111111101111111111111111111111111111111111111111111111111111 +Max: 0111111111101111111111111111111111111111111111111111111111111111

Wikipedia explica que cuando el campo exponente es todo-bits-1, el número es Inf o NaN. Inf tiene todos los bits de la mantisa cero; NaN tiene al menos un bit en la mantisa establecido en 1. El bit de signo conserva su significado normal para Inf pero no es significativo para NaN. Double.NaN de Java es un valor particular que se interpretará como NaN, pero hay 2 53 -3 más.


Java usa el punto flotante IEEE 754.

La mayoría de los números se expresan en un formato de signo-exponente-mantisa con la mantisa teniendo un 1 implícito.

Los valores extremos del campo exponente (todos ceros y todos) no se utilizan como valores normales de exponente. En cambio, se utilizan para representar casos especiales.

Todos los ceros en el feild de exponente se utilizan para representar números (incluidos el cero positivo y el negativo) que son demasiado pequeños para representarlos en el formato normal.

Todos los que están en la vista se usan para representar valores especiales. Si todos los bits en la mantisa son cero, entonces el valor es más o menos infinito (signo indicado por el bit de signo). De lo contrario, el valor es NaN.