Considérons une représentation en virgule fixe qui peut être considérée comme un cas dégénéré d'un nombre flottant. Il est tout à fait possible d'utiliser le complément à 2 pour les nombres négatifs. Mais pourquoi un bit de signe est-il nécessaire pour les nombres à virgule flottante, les bits de mantisse ne devraient-ils pas utiliser les compléments de 2?
Aussi pourquoi les bits d'exposant utilisent-ils une polarisation au lieu d'une représentation de grandeur signée (similaire aux bits de mantisse) ou une représentation du complément à 2?
Mise à jour: Désolé si je n'ai pas été clair. Je cherchais la raison de la forme de la représentation en virgule flottante. S'il n'y a pas de compromis de mise en œuvre solide entre les alternatives, alors quelqu'un pourrait-il expliquer les aspects historiques de la représentation en virgule flottante?
De Wikipédia:
Le complément à deux est une représentation de nombres négatifs qui s'avère très pratique. C'est toute la raison de l'utiliser.
Une paire mantisse-exposant est une représentation d'un nombre à virgule flottante. La plupart du temps, lorsque vous utilisez des nombres à virgule flottante, vous ne faites pas d'arithmétique uniquement sur la mantisse ou uniquement sur l'exposant.
la source
Fausse hypothèse. Ce n'est pas nécessaire. Je suis presque sûr d'avoir rencontré des formats à virgule flottante qui utilisaient le complément à 2 pour la mantisse, mais je devrais trouver des noms.
Je suis loin d'être un spécialiste de l'analyse numérique, mais je comprends qu'avoir signé zéro est important pour eux. Il est probablement plus facile à manipuler que son complément. C'était probablement un critère dans le choix de l'IEEE-754.
Encore une fois, ce n'est pas nécessaire et certains ont fait les choses différemment.
C'est la représentation pour laquelle il est plus facile de faire une implémentation matérielle pour l'ensemble des opérations qui se font sur les exposants (et ici on n'a pas besoin d'une représentation pour -0).
L'une des conséquences de ce choix est que vous pouvez utiliser la comparaison d'entiers signés pour comparer le nombre de FP si vous ne vous souciez pas de NaN, ce qui était peut-être un critère pour certains (le fait que NaN ait besoin d'une gestion spéciale me fait douter qu'il ne l'était pas pour IEEE-754).
la source
IEEE 754 utilise le signe / magnitude, pas le complément à deux ou le complément à un.
Le complément à deux a l'inconvénient que les plages positive et négative ne sont pas identiques. Si tous les modèles de bits sont valides, alors vous avez des nombres x où vous ne pouvez pas facilement calculer -x. C'est mauvais. L'alternative est qu'il existe des modèles de bits non valides, ce qui est également mauvais. Dans IEEE 754, il n'y a pas de modèles de bits non valides pour les virgules flottantes 64 ou 32 bits, vous n'avez donc pas à vous en soucier.
Le complément à un rendrait la multiplication / division plus complexe (avec une amplitude signée, il suffit de xor les signes et de traiter la mantisse comme un nombre non signé). Pour ajouter et soustraire, je ne veux vraiment pas penser à ajouter et soustraire dans son complément, cela me fait mal à la tête.
la source
La signature de zéros donne une expressivité accrue qui peut être utile dans les calculs numériques. La page wikipedia ' Signé zéro ' dit:
L'un des principaux concepteurs de la virgule flottante IEEE 754, WH Kahan est un partisan du zéro signé pour ces raisons. Son opinion aura probablement eu beaucoup de poids.
la source
Je pense qu'il est important de comprendre que les calculs en virgule flottante produisent des valeurs approximatives , pas des valeurs exactes . Autrement dit, si un calcul à virgule flottante donne une valeur codée X, cela représente alors une valeur théoriquement idéale qui n'est presque certainement PAS X, mais se situe dans la plage [X .. X + e) {où «e» est le « machine epsilon ', c'est-à-dire qu'il n'y a pas de nombre à virgule flottante entre X et X + e}. Plus précisément, un zéro à virgule flottante représente un nombre idéal qui n'est probablement pas exactement zéro, mais qui est trop petit pour être représenté avec une valeur codée à virgule flottante non nulle.
Étant donné que l'utilisation de la représentation par signe et amplitude est un moyen de permettre au codage de «se souvenir» exactement de quel côté de zéro se trouve la valeur idéale, le positif ou le négatif. Ceci est critique dans certains calculs complexes (au sens `` a + bi '') - les fonctions complexes-> complexes sont souvent `` à valeurs multiples '', donc pour un calcul correct, il est essentiel de prêter attention aux emplacements des `` coupures de branches ''. Les zéros signés marquent alors dans un certain sens les emplacements de ces coupes de branches - le calcul effectué du côté positif sera différent de celui du côté négatif.
la source
La plupart des formats à virgule flottante profitent du fait que, dans un système binaire, toute valeur non nulle avec un exposant non minimum aura un "1" comme bit le plus significatif de la mantisse. Ainsi, dans un système avec un champ de 23 bits pour la mantisse, les mantisses de nombres positifs ne vont pas de 0 à 8 388 607 mais plutôt de 8 388 608 à 16 777 215. Les mantisses de nombres positifs ou non varient de -16 777 215 à -8 388 608 et de + 8 388 608 à + 16 777 215. Alors que le complément à deux est le meilleur format numérique lorsqu'il est nécessaire d'avoir des calculs croisés "en douceur", les plages discontinues de valeurs de mantisse signifient que les calculs ne pourraient pas fonctionner sans problème sur zéro s'ils utilisent le complément à deux ou autre chose .
la source