2017-04-10 3 views
2

J'ai deux nombres à virgule flottante en notation binaire 16 bits, et quand je suis en train de les ajouter que je tombe sur un problème:IEEE 754 somme d'addition de représentation à virgule flottante dépasse les endroits au format 16 bits

A = 0 11110 1111000000  
B = 0 11010 1101110000 

Maintenant A + B est ce que j'essaie de faire, mais voici mon problème; Comment représenter la somme en format 16 bits?

A = 63488

B = 3808

A + B = 67296

Le nombre décimal maximum qui peut être apte à 16 bits en notation IEEE 754 est 65504, étant représenté:

MAX = 0 11110 1111111111 = 65504 

Comment représenter 67296?

+2

AFAICT, vous ne pouvez pas. Vous avez un débordement. –

+2

Si vous suivez IEEE 754, le résultat est positif infini, '0 11111 0000000000' –

Répondre

1

Le problème est de calculer A+B pour:

A = 0 11110 1111_0000_00  
B = 0 11010 1101_1100_00 

Faire les principaux bits à explicite et l'adaptation à la même exposant:

A = 0 11110 1.1111_0000_00  
B = 0 11110 0.0001_1101_11 

Ajout:

A + B = 0 11110 10.0000_1101_11 

normalisant, ignorant le dépassement de l'exposant:

A + B = 0 11111 1.0000_0110_111 

ronde à débordement de l'exposant, en ignorant toujours le plus proche:

A + B = 0 11111 1.0000_0111_00 

L'exposant après arrondi est trop grand pour stocker un nombre normal. La somme est positive, donc le résultat est l'infini positif:

A + B = 0 11111 0000_0000_00 
0

Aussi! Une autre réponse est NaN (Not a Number) quand l'exposant est tout un et la fraction diffère de zéro!

+1

Cela semble être une réponse plus précise que de simplement conclure qu'il devient infini! – Oskarzito