¿Cómo pueden unums emular el cero negativo de IEEE?

9

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 )

falso
fuente
1
¿Por qué pensarías que la asignación debe ser 1 a 1? Las razones expuestas en las preguntas que vinculó no son un problema con unums, entonces, ¿por qué hacer un cero negativo?
Ordous
@Ordous: Porque (Ch.18.1, p.257) "Los unums son un superconjunto de flotadores. Los flotadores son simplemente unums para los que el ubit es cero, etc.etc". todo lo cual (incluido 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.
falso
55
Es bastante difícil argumentar en contra de una cita sin tener el libro a mano. Sin embargo, sus diapositivas en la presentación de IEEE declararon como una ventaja de la computación unum: "No hay necesidad de flujo insuficiente". Por lo tanto: no hay necesidad de cero negativo, ya que es precisamente un flujo inferior. Tal vez podría extender este sistema para incluir un cero negativo, pero no hay razón para hacerlo. Honestamente negativo 0 en IEEE es inconsistente con las matemáticas .
Ordous
@Ordous: Underflow es manejado por el intervalo abierto (-smallsubnormal, 0) y su contraparte positiva. Entonces estos son lo más parecido a -0 y +0. Pero, ¿puede este intervalo realmente actuar como si?
falso
8
Underflow no se "maneja" aquí, simplemente no existe . Negativo 0 es un problema en IEEE y este estándar está tratando de solucionarlo junto con otras cosas. No puede ni debe igualar -0 y +0, pero dado que en IEEE su diferencia es 0, tienen que ser iguales. Esta paradoja no tiene una buena solución. En Unums que hacer una diferencia, por lo tanto no pueden ser iguales. El objetivo del sistema es solucionar problemas en IEEE, pero eso significa que es necesariamente inconsistente con él. Esta es una de dichas inconsistencias. Y la razón por la que hay un sistema incorporado propuesto para usar estándares antiguos en su libro.
Ordous

Respuestas:

3

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:

  • valor negativo, valor absoluto demasiado pequeño para representarlo: esto se representa con IEEE -0.0 y puede asignarse fácilmente a (-smallsubnormal,0)
  • valor exactamente nulo, representado por IEEE 0.0, asignado a 0
  • valor positivo demasiado pequeño para representar; este también tiene representación IEEE 0.0 , pero debe asignarse a (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 mapeado 0o 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 ...

Aconcagua
fuente