Pourquoi biaiser l'exposant d'un nombre flottant?

j'essaie d'enrouler ma tête autour de cette représentation en virgule flottante de nombres binaires, mais je n'ai pas pu trouver, peu importe où j'ai regardé, une bonne réponse à la question.

Pourquoi l'exposant biaisé?

Qu'est-ce qui ne va pas avec la bonne vieille méthode du complément fiable de deux?

j'ai essayé de regarder L'article de Wikipedia sur le sujet, mais tout ce qu'il dit est: "la représentation habituelle pour les valeurs signées, rendrait la comparaison plus difficile."

20
demandé sur Mark Dickinson 2013-11-08 21:10:36

2 réponses

les encodages IEEE 754 ont une propriété pratique qui permet d'effectuer une comparaison d'ordre entre deux nombres positifs non-NaN en comparant simplement les chaînes de bits correspondantes lexicographiquement, ou de façon équivalente, en interprétant ces chaînes de bits comme des entiers non-signés et en comparant ces entiers. Cela fonctionne sur toute la gamme de flottant-point allant de +0,0 à +Infini (et puis il est une question simple d'étendre la comparaison pour prendre en compte le signe). Ainsi par exemple dans IEEE 754 format binaire 64,1.1 est codé comme chaîne de bits (msb en premier)

0011111111110001100110011001100110011001100110011001100110011010

0.01 est codé comme chaîne de bits

0011111110000100011110101110000101000111101011100001010001111011

qui se produit lexicographiquement avant la chaîne de bits pour 1.1.

pour que cela fonctionne, les nombres avec des exposants plus petits doivent comparer avant les nombres avec des exposants plus grands. Un exposant biaisé fait ce travail, tandis qu'un exposant représenté dans le complément de two rendrait la comparaison plus impliquée. Je crois que c'est ce à quoi le commentaire de Wikipedia s'applique.

une autre observation est qu'avec le codage choisi, le nombre de virgule flottante +0.0 est codé comme une chaîne de bits composée uniquement de zéros.

23
répondu Mark Dickinson 2013-11-09 09:32:01

Je ne me souviens pas des détails, mais il y avait un certain désir pour que l'exposant le plus élevé soit légèrement plus loin de zéro que l'exposant le moins normal. Cela augmente le nombre de valeurs x pour lesquels les deux x et ses réciproques sont à peu près représentables. Par exemple, avec IEEE-754 64-bit binaire flottant-point, la gamme normale d'exposant est -1022 à 1023. Cela fait la plus grande valeur représentative finie juste en dessous de 21024, donc l'intervalle pour x et son réciproque sont à peu près toutes les deux représentatives est presque 2-1024 à presque 21024. (Les nombres à l'extrémité très basse de cet intervalle sont inférieurs à la normale, de sorte qu'une certaine précision est perdue, mais ils sont toujours représentatifs.)

avec une représentation du complément à deux, les valeurs de l'exposant vont de -1024 à 1023, et nous devons en réserver deux pour traiter les zéros, les sous-normales, les infinies et les NaNs. Qui laisse une gamme de -1023 à 1022. Avec ceci, l'intervalle pour x tels que x et son réciproque est à peu près représentative est presque égale à 2-1023 à 21023. Ainsi, l'arrangement biaisé fournit une plus grande gamme de valeurs utiles.

3
répondu Eric Postpischil 2013-11-08 17:38:48