Atualmente, estou lendo "O Fim do Erro - Unum Computing", de John Gustafson ( Youtube ). O que ainda não tenho certeza é como os casos tratados no IEEE por zero assinado negativamente são tratados com unums.
Portanto, antes de tudo, os unums permitem representar certos valores exatos (da mesma forma que os pontos flutuantes) e, adicionalmente, permitem representar os intervalos abertos que se situam entre os valores exatos (incluindo -∞ e exact). Portanto, a linha do número real completa é representada pela alternância de valores precisos e intervalos abertos:
-∞, (-∞, -maxreal), -maxreal, ... -smallsubnormal, (-smallsubnormal, 0),
0,
(0, smallsubnormal), smallsubnormal, ... maxreal, (maxreal, ∞), ∞
Dessa maneira, os valores excepcionais (na tradição IEEE), como subfluxo e excesso, são apenas alguns intervalos abertos. Em outras palavras: essas condições anteriormente especiais agora se transformam em casos regulares.
IEEE -∞ corresponde à união de {-∞} e (-∞, -maxreal).
E zero assinado agora pode ser os intervalos (-smallsubnormal, 0) e (0, smallsubnormal).
No entanto, 1 / (- smallsubnormal, 0) agora é (-∞, -maxreal) e não -∞ sozinho. Enquanto 1/0 é ∞.
O que ainda estou hesitando sobre isso é que no IEEE -0 e +0 se comparam iguais. Mas eles não fazem unum. Parece que o mapeamento não é 100%. Então, eu me pergunto se existem casos em que a diferença pode aparecer ((e se esses casos são realmente relevantes)).
(Estou ciente de Por que é zero negativo importante? , Usos para ponto flutuante valor negativo )
fonte
guess
) sugere que se pode mais ou menos (e como começo) traduzir as coisas literalmente. Estou perfeitamente ciente de que uma tradução literal não tira o máximo proveito dos unums.Respostas:
Muito tempo para um comentário, portanto, escreva-o como resposta ...
O problema com o IEEE é que temos três casos para diferenciar, mas apenas duas representações para estes:
(-smallsubnormal,0)
0
(0, +smallsubnormal)
.O problema agora não é o zero negativo, mas que não podemos diferenciar se um IEEE 0.0 é o segundo ou terceiro caso! Em outras palavras: a função de mapeamento de UNUM para IEEE não é bijetiva - e nunca será, como para qualquer outro valor IEEE, também, nunca sabemos se é o exato ou o intervalo!
Portanto, acho absolutamente bom mapear -0,0 para
(-smallsubnormal,0)
, e precisamos decidir se o IEEE 0.0 deve ser mapeado0
ou possivelmente melhor(0, +smallsubnormal)
. Pessoalmente, cuido do primeiro, mas isso não é muito autoritário ...Quanto à comparação com o IEEE (-0,0 sendo igual a 0,0): nunca se deve comparar a igualdade exata de qualquer maneira (operador C ou C ++: ==), mas apenas para o valor absoluto da diferença ser menor do que algum limite apropriado. Esse problema é eliminado apenas parcialmente, mesmo com UNUMS, como agora podemos comparar a igualdade exata, se o bit u não estiver definido, mas com ele sendo definido, ainda não sabemos realmente ...
fonte