Si vous creusez dans la représentation standard des nombres à virgule flottante, c'est en fait une mantisse de type entier et un exposant. Je dis "entier" puisque, quand il est normalisé, le premier bit est toujours un '1' - vous savez que le produit de deux nombres commencera toujours par 0 ou 1 (et dans le premier cas vous devez décaler les résultats par un et ajuster l'exposant en conséquence, à la perte d'un seul bit de précision). La multiplication et la division se comportent bien tant que vous ne débordez pas le nombre de bits que vous pouvez conserver dans l'exposant.
D'autre part, l'addition et la soustraction nécessitent de changer la représentation de la forme normalisée en une représentation où les exposants correspondent. C'est pourquoi vous pouvez obtenir des résultats apparemment bizarres si vous ajoutez deux nombres qui sont d'une magnitude follement différente ou si vous soustrayez deux nombres qui sont presque identiques. C'est pourquoi les résultats intermédiaires ont généralement beaucoup plus de précision que les flotteurs et réels à 4 et 8 octets.
Pourriez-vous utiliser la notation à deux-complément ici? Peut-être ... mais vous ne pourriez pas utiliser les mêmes règles pour manipuler la représentation. Je pense que cela revient à faire confiance à la génération d'experts qui ont examiné le problème. Si des centaines de docteurs et d'ingénieurs principaux pensent que la représentation actuelle est la meilleure approche, alors je dois les croire.
@Paul R: donc, les flotteurs sont optimisés pour les multiplications, tandis que les entiers complémentaires à 2 sont optimisés pour les ajouts ... ai-je raison? – Moeb
@cambr: oui, c'est une façon raisonnable de voir les choses, bien qu'il y ait beaucoup d'autres problèmes dans la conception des formats à virgule flottante et des implémentations matérielles associées –