La suma de NaNs: ¿Cómo se calcula el patrón de bits subyacente?

Peter Littig:

Pregunta : ¿Cómo calcular la JVM la suma de dos NaNs de doble precisión?

Detalles: El IEEE 754 especificación se reserva dos gamas de patrones de bits para NaNs:

0x7ff0000000000001 -> 0x7fffffffffffffff

y

0xfff0000000000001 -> 0xffffffffffffffff.

IEEE 754 requiere la suma de dos NaNs ser un NaN, pero, por lo que yo puedo decir, no dice nada sobre los detalles de implementación. Por lo tanto, para llegar a mi pregunta: Si escribimos b(x)para el patrón de bits hexadecimal de un NaN x, me gustaría saber: ¿Cómo funciona el cálculo JVM b(x + y)desde b(x)y b(y)?jugando con un poco de código, estoy llevan a creer:

Reclamar : Let t = 0x0008000000000000. Si b(y) + testá en un rango NaN válido, entonces:

b(x + y) = b(y) + t

de otra manera,

b(x + y) = b(y).

Esto parece extraño para mí, y me gustaría saber más. Para que conste, estoy usando Java 8 en una MacBook i7 de Intel (en el caso de la versión de Java o la materia de hardware físico.) He aquí dos ejemplos:

Ejemplo 1, donde b(x + y) = b(y):

b(x) = 0x7fffddee0f43e7d4
b(y) = 0xfffaeaba08397e4e
b(x + y) = 0xfffaeaba08397e4e

Ejemplo 2, donde b(x + y) = b(y) + t:

b(x) = 0xffff4f0202031106
b(y) = 0xfff79342c97104ff
b(x + y) = 0xffff9342c97104ff

¿Alguien sabe cómo la suma está siendo evaluada por la JVM?

¡Gracias!

alias :

Para coma flotante, la mayoría de las implementaciones se basan simplemente en lo que hace el hardware subyacente. Suponiendo que se está ejecutando esto en algún tipo de arquitectura x86, Acá las reglas: (Usted puede encontrar esto en la Sección 4.8.3.5 de https://software.intel.com/sites/default/files/managed/39 /c5/325462-sdm-vol-1-2abcd-3abcd.pdf ):

introducir descripción de la imagen aquí

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=372706&siteId=1
Recomendado
Clasificación