Comment les unums peuvent-ils émuler le zéro négatif de l'IEEE?

9

Je lis actuellement "The End of Error - Unum Computing" par John Gustafson ( Youtube ). Ce que je ne sais toujours pas, c'est comment les cas traités dans IEEE par zéro signé négativement sont traités avec des unums.

Ainsi, tout d'abord, les unums permettent de représenter certaines valeurs exactes (de manière similaire aux virgules flottantes) et permettent en outre de représenter les intervalles ouverts qui se situent entre les valeurs exactes (y compris exact-exact et ∞). Ainsi, la ligne de nombres réels complète est représentée en alternant des valeurs précises et des intervalles ouverts:

-∞, (-∞, -maxreal), -maxreal, ... -smallsubnormal, (-smallsubnormal, 0),

0,

(0, smallsubnormal), smallsubnormal, ... maxreal, (maxreal, ∞), ∞

De cette manière, les valeurs exceptionnelles (dans la tradition IEEE) comme le débordement et le débordement ne sont que quelques intervalles ouverts. En d'autres termes: ces conditions autrefois spéciales se transforment désormais en cas réguliers.

Le -'s de l'IEEE correspond à l'union de {-∞} et (-∞, -maxreal).

Et le zéro signé maintenant pourrait être les intervalles (-smallsubnormal, 0) et (0, smallsubnormal).

Cependant, 1 / (- smallsubnormal, 0) est maintenant (-∞, -maxreal) et non -∞ seul. Alors que 1/0 est ∞.

Ce que j'hésite encore à ce sujet, c'est que dans IEEE -0 et +0, comparer égal. Mais ce n'est pas le cas. Il semble que la cartographie ne soit pas à 100%. Je me demande donc s'il y a des cas où la différence peut apparaître ((et si ces cas sont vraiment pertinents)).

(Je suis au courant Pourquoi est - zéro négatif important? , Utilisations pour la valeur en virgule flottante négatif )

faux
la source
1
Pourquoi penseriez-vous que la cartographie doit être 1: 1? Les raisons énoncées dans les questions que vous avez liées ne sont pas un problème avec unums, alors pourquoi faire un zéro négatif?
Ordous
@Ordous: Parce que (Ch.18.1, p.257) "Les unums sont un sur-ensemble de flottants. Les flotteurs sont simplement des unums pour lesquels l'ubit est zéro, etc. etc." ce qui (y compris guess) suggère que l'on peut plus ou moins (et pour commencer) traduire les choses littéralement. Je suis pleinement conscient qu'une traduction littérale ne tire pas pleinement parti des unums.
faux
5
Il est assez difficile de contester une citation sans avoir le livre sous la main. Cependant, ses diapositives dans la présentation de l'IEEE ont indiqué comme un avantage de l'informatique unum: "Pas besoin de sous-dépassement". Par conséquent: pas besoin de zéro négatif, car il s'agit précisément d'un sous-dépassement. Vous pourriez peut-être étendre ce système pour inclure un zéro négatif, mais il n'y a aucune raison de le faire. Honnêtement, un 0 négatif dans IEEE est incompatible avec les mathématiques .
Ordous
@Ordous: le sous-dépassement est géré par l'intervalle ouvert (-smallsubnormal, 0) et son homologue positif. Ce sont donc les choses les plus proches de -0 et +0. Mais cet intervalle peut-il vraiment agir comme si?
faux
8
Underflow n'est pas "géré" ici, il n'existe tout simplement pas . Le 0 négatif est un problème dans IEEE et cette norme essaie de le résoudre avec d'autres choses. Vous ne pouvez pas et ne devez pas égaler -0 et +0, mais comme dans IEEE leur différence est 0, ils doivent être égaux. Ce paradoxe n'a pas de bonne solution. En Unums ils faire une différence, par conséquent , ils ne peuvent pas être égaux. L'intérêt du système est de résoudre les problèmes dans IEEE, mais cela signifie qu'il est nécessairement incompatible avec lui. C'est l'une desdites incohérences. Et la raison pour laquelle il existe un système intégré proposé pour utiliser les anciennes normes dans son livre.
Ordous

Réponses:

3

Trop long pour un commentaire, alors écrivez ceci comme une réponse ...

Le problème avec IEEE est que nous avons trois cas à différencier, mais seulement deux représentations pour ceux-ci:

  • valeur négative, valeur absolue trop petite pour représenter - ceci est représenté par IEEE -0.0 et pourrait être facilement mappé à (-smallsubnormal,0)
  • valeur exactement nulle, représentée par IEEE 0.0, mappée à 0
  • valeur positive trop petite pour représenter; celui - ci est représenté IEEE 0.0 ainsi , mais devrait être mis en correspondance (0, +smallsubnormal).

Le problème n'est pas maintenant le zéro négatif, mais que nous ne pouvons pas différencier si un IEEE 0.0 est le deuxième ou le troisième cas! En d'autres termes: la fonction de mappage d'UNUM à IEEE n'est pas bijective - et ne le sera jamais, comme pour toute autre valeur IEEE, nous ne savons jamais si c'est la valeur exacte ou l'intervalle!

Je pense donc qu'il est tout à fait correct de mapper -0.0 à (-smallsubnormal,0), et nous devons décider si IEEE 0.0 doit être mappé 0ou peut-être mieux (0, +smallsubnormal). Personnellement, je m'occupe du premier, mais ce n'est pas très autoritaire ...

En ce qui concerne la comparaison avec IEEE (-0,0 étant égal à 0,0): Il ne faut de toute façon jamais (presque) jamais comparer pour une égalité exacte (opérateur C ou C ++: ==), mais uniquement pour la valeur absolue de la différence inférieure à un seuil approprié. Ce problème n'est éliminé que partiellement, même avec UNUMS, car nous pouvons maintenant comparer l'égalité exacte, si le bit u n'est pas défini, mais avec ce paramètre, nous ne savons toujours pas vraiment ...

Aconcagua
la source