Convertir des formats avec un nombre de bits différent pour l’exposant et la partie fractionnaire

J’essaie de me rafraîchir sur des flotteurs. Je lis un exercice qui demande de convertir du format A ayant: k = 3, fraction de 4 bits et Bias = 3 au format B ayant k = 4, fraction de 3 bits et Bias 7.
Nous devrions arrondir lorsque cela est nécessaire.
Exemple entre formats:

011 0000 (Value = 1) =====> 0111 000 (Value = 1) 010 1001 (Value = 25/32) =====> 0110 100 (Value = 3/4 Rounded down) 110 1111 (Value = 31/2) =====> 1011 000 (Value = 16 Rounded up) 

Problème: Je n’arrive pas à comprendre comment fonctionne la conversion. J’ai tout d’abord réussi à le faire correctement dans certains cas, mais mon approche consistait à convertir le modèle de bits du format A en valeur décimale, puis à exprimer cette valeur dans le modèle de bits du format B.
Mais existe-t-il un moyen de passer d’une structure de bit à l’autre sans effectuer cette conversion, en sachant simplement que nous étendons le bit e de 1 bit et réduisons la fraction de 1?

Mais existe-t-il un moyen de passer d’une structure de bit à l’autre sans effectuer cette conversion, en sachant simplement que nous étendons le bit e de 1 bit et réduisons la fraction de 1?

Oui, et cela est beaucoup plus simple que de passer par la valeur décimale (ce qui n’est correct que si vous convertissez en valeur décimale exacte et non une approximation).

 011 0000 (valeur = 1)   
   représente 1,0000 * 2 3-3
   est vraiment 1.0 * 2 0 en binary «naturel»
   représente 1.000 * 2 7-7 au pré-formatage du format de destination
    =====> 0111 000 (valeur = 1)

Deuxième exemple:

 010 1001 (valeur = 25/32)  
   représente 1.1001 * 2 2-3
   est vraiment 1.1001 * 2 -1
   arrondit à 1.100 * 2 -1 quand on supprime un chiffre, à cause de «l'égalité des chances»
   est 1.100 * 2 6-7 préformaté
 =====> 0110 100 (valeur = 3/4 arrondi)

Troisième exemple:

 110 1111 (valeur = 31/2)
   représente 1.1111 * 2 6-3
   est vraiment 1.1111 * 2 3
   arrondit à 10.000 * 2 3 lorsque nous supprimons un chiffre, car «tie-to-even» signifie ici «haut» et le report se propage très loin
   renormalise en 1.000 * 2 4
   est 1.000 * 2 11-7 préformaté
    =====> 1011 000 (valeur = 16 arrondi au maximum) 

Les exemples 2 et 3 sont des “cas intermédiaires”. Eh bien, en arrondissant les fractions de 4 bits aux fractions de 3 bits, 50% des exemples seront de la moitié des cas de toute façon.

Dans l’exemple 2, 1.1001 est aussi proche de 1.100 que 1.101 . Alors, comment est choisi le résultat? Celui qui est choisi est celui qui se termine par 0 . Ici, 1.100 .