Comment soustraire IEEE 754 nombres Stack Overflow

Vraiment pas différent que vous le faites avec un crayon et du papier. Bon un peu différent

le nombre plus grand domine, passer la mantisse plus petit nombre au large dans le seau à peu jusqu'à ce que les exposants correspondent

puis effectuer la soustraction des mantisses

Puis normalise (qui, dans ce cas, il est)

C'était avec la base de 10 numéros.

Dans float IEEE, simple précision

bit de signe, exposant, mantisse

Et si vous écrivez un programme pour voir ce que les choses un ordinateur est 123400, vous obtenez la même chose:

Nous savons donc l'exposant et mantisse pour le premier opérande »

Maintenant, le second opérande

L'exposant est biaisé ajouter 127 et obtenir 139 = 0x8B = 0b10001011

Mets le tout ensemble

Et un programme informatique / compilateur donne le même

Maintenant, pour répondre à votre question. En utilisant les composants des nombres à virgule flottante, j'ai restauré le 1 impliqué ici parce que nous en avons besoin

Maintenant, nous pouvons soustraire les mantisses. Si les bits de signe correspondent alors nous allons soustraire en fait, s'ils ne correspondent alors nous ajoutons. Ils correspondent à ce sera une soustraction.

ordinateurs effectuent une soustraction en utilisant une logique d'addition, en inversant le deuxième opérateur sur le chemin de l'additionneur et à affirmer le report de bit, comme ceci:

Et maintenant, tout comme avec du papier et un crayon permet l'ajout effectuer

ou le faire avec six pans sur votre calculatrice

Un peu sur le fonctionnement du matériel, car cela était vraiment un Soustraire en utilisant l'additionneur nous inversons aussi effectuer des bits (ou sur certains ordinateurs, ils laisser tel quel). Alors que mener à bien un 1 est une bonne chose que nous supprimons essentiellement cela. Si elle avait été un report d'un zéro il nous aurait fallu plus de travail. Nous n'avez pas un EFFECTUER si notre réponse est vraiment 0xE66800.

Très rapidement permet de voir qu'une autre façon, au lieu d'inverser et l'ajout d'un permet d'utiliser simplement une calculatrice

En essayant de le visualiser je peut-être fait pire. Le résultat de la soustraction de mantisse est 111001100110100000000000 (0xE66800), dans le bit le plus significatif il n'y avait pas de mouvement nous nous retrouvons avec un numéro 24 bits dans ce cas avec le bitMS d'un 1. Pas de normalisation. Pour vous normaliser besoin de changer la mantisse à gauche ou à droite jusqu'à ce que les 24 bits aligne avec les plus importantes 1 qui ont quitté position la plus, le réglage de l'exposant pour chaque décalage de bits.

Maintenant, le décapage 1. peu la réponse que nous mettons les pièces ensemble

Si vous avez suivi le long en écrivant un programme pour le faire, je l'ai fait aussi bien. Ce programme viole la norme C à l'aide d'une union d'une manière inappropriée. Je suis parti avec avec mon compilateur sur mon ordinateur, ne vous attendez pas à travailler tout le temps.

Et notre résultat correspond à la sortie du programme ci-dessus, nous avons eu un 0x47E66800 faire la main

Si vous écrivez un programme pour synthétiser le calcul en virgule flottante votre programme peut effectuer la soustraction, vous ne devez pas faire l'inverse et d'ajouter plus une chose, plus complique comme nous l'avons vu ci-dessus. Si vous obtenez un résultat négatif si vous devez jouer avec le bit de signe, inverser le résultat, puis normaliser.

1) extraire les pièces, signer, exposant, mantisse.

3) étant une opération de soustraction si les bits de signe sont identiques, vous effectuez une Soustraire, si les bits de signe sont différents que vous effectuez un ajout des mantisses.

4) si le résultat est zéro, alors votre réponse est zéro, coder la valeur IEEE pour zéro résultat, sinon:

6) pour une précision unique enlever le premier 1. de la mantisse, si l'exposant a débordé alors que vous entrez dans la construction d'une signalisation nan. Si les bits de signe étaient différents et vous avez effectué une addition, vous devez faire face à déterminer le bit de signe de résultat. Si tout va bien comme ci-dessus vous placez juste le bit de signe, mantisse et exposant dans le résultat

Multiplier et diviser est différent, vous avez demandé au sujet subract, de sorte que tout ce que je couvert.

Articles Liés