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 )
la source
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.Réponses:
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:
(-smallsubnormal,0)
0
(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é0
ou 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 ...
la source