2010-04-19 14 views
0

Nous avons un complément à 2 pour les entiers qui nous permet d'effectuer des opérations sans se soucier du signe. C'est une grande aide au niveau de la mise en œuvre.Pourquoi n'y a-t-il pas une meilleure représentation des points flottants que le signe et la magnitude?

De même, nous avons tellement d'opérations en virgule flottante et pourtant nous comptons sur le signe et la magnitude. Quelle est la raison? Pourquoi un système de complément à 2 ne fonctionne-t-il pas pour les flotteurs? Pourquoi?

Répondre

4

Pour l'ajout de flottants, il y a beaucoup plus à faire que dans le cas de l'entier - vous devez décaler une valeur pour que les exposants correspondent. Tout coût additionnel pour faire un signe + ajout d'amplitude est insignifiant par comparaison.

Notez également que le bit de signe séparé est beaucoup mieux pour la multiplication - vous avez juste besoin d'un seul multiplicateur non signé qui gère tous les cas avec les bits de signe pris en charge séparément. Comparez cela avec la multiplication du complément à deux, où vous devez normaliser les signes ou avoir un support pour les multiplications signées/non signées.

+0

@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

+0

@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 –

0

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.