Actualmente estoy leyendo "The End of Error - Unum Computing" de John Gustafson ( Youtube ). De lo que todavía no estoy seguro es de cómo los casos manejados en IEEE por cero con signo negativo se manejan con unums.
Por lo tanto, en primer lugar, los unums permiten representar ciertos valores exactos (de manera similar a los puntos flotantes) y, además, permiten representar los intervalos abiertos que se encuentran entre los valores exactos (incluidos los exactos -∞ y ∞). Por lo tanto, la recta numérica real completa se representa alternando valores precisos e intervalos abiertos:
-∞, (-∞, -maxreal), -maxreal, ... -smallsubnormal, (-smallsubnormal, 0),
0,
(0, smallsubnormal), smallsubnormal, ... maxreal, (maxreal, ∞), ∞
De esta manera, los valores excepcionales (en la tradición IEEE) como subflujo y desbordamiento son solo algunos intervalos abiertos. En otras palabras: estas condiciones anteriormente especiales ahora se convierten en casos regulares.
IEEE -∞ corresponde a la unión de {-∞} y (-∞, -maxreal).
Y el cero con signo ahora podría ser los intervalos (-smallsubnormal, 0) y (0, smallsubnormal).
Sin embargo, 1 / (- smallsubnormal, 0) ahora es (-∞, -maxreal) y no -∞ solo. Mientras que 1/0 es ∞.
Lo que todavía estoy dudando sobre esto es que en IEEE -0 y +0 se comparan igual. Pero no lo hacen en unums. Parece que el mapeo no es 100%. Entonces, me pregunto si hay casos en los que la diferencia puede mostrar ((y si esos casos son realmente relevantes)).
(Estoy al tanto de qué es cero negativo importante? , Usos de valor de punto flotante negativo )
fuente
guess
) sugiere que uno puede traducir más o menos (y como comienzo) las cosas literalmente. Soy plenamente consciente de que una traducción literal no aprovecha al máximo los unums.Respuestas:
Demasiado tiempo para un comentario, así que escribir esto como respuesta ...
El problema con IEEE es que tenemos tres casos para diferenciar, pero solo dos representaciones para estos:
(-smallsubnormal,0)
0
(0, +smallsubnormal)
.¡El problema ahora no es el cero negativo, sino que no podemos diferenciar si un IEEE 0.0 es el segundo o tercer caso! En otras palabras: la función de mapeo de UNUM a IEEE no es biyectiva, y nunca lo será, como para cualquier otro valor de IEEE, ¡nunca sabemos si es el exacto o el intervalo!
Por lo tanto, creo que está absolutamente bien mapear -0.0
(-smallsubnormal,0)
, y debemos decidir si IEEE 0.0 es más bien mapeado0
o posiblemente mejor(0, +smallsubnormal)
. Personalmente atiendo al primero, pero eso no es muy autoritario ...En cuanto a la comparación con IEEE (-0.0 es igual a 0.0): de todos modos (casi) nunca se debe comparar para la igualdad exacta (operador C o C ++: ==), pero solo para que el valor absoluto de la diferencia sea menor que algún umbral apropiado. Este problema se elimina solo parcialmente, incluso con UNUMS, ya que ahora podemos comparar la igualdad exacta, si el bit u no está configurado, pero al estar configurado, todavía no sabemos realmente ...
fuente