J'ai une information de localisation dans la chaîne HEX. J'ai besoin de le convertir en entier flottant par le protocole IEEE-754.Comment calculer la mantisse en python lorsque l'exposant atteint -127
J'ai donc écrit ce code pour trouver signe du nombre, calculer exposant et mantisse de la représentation binaire du nombre hexadécimal donné.
def _calculte_mantissa(bin_number):
val = 1
bit_count = -1
bit_length = 0
while bit_length <= 22:
print bit_count, bit_length
val += int(bin_number[bit_length]) * 2**bit_count
bit_count -= 1
bit_length += 1
print val
return val
def convert_position(pos):
bin_pos = format(int(pos, 16), "0>32b")
sign = (-1)**int(bin_pos[0], 2)
exponent = int(bin_pos[1:9], 2) - 127
mantissa = _calculte_mantissa(bin_pos[9:])
position = sign * 2**exponent * mantissa
return position
Le problème est; Si exposant est inférieur à -126, disons -127, le résultat n'est pas correct. Je vérifie le résultat from this address, les résultats du signe et de l'exposant sont corrects mais le résultat de la mantisse est différent du mien.
je manque quelque chose au sujet de la page est ce que dit:
En conséquence, la mantisse a une valeur comprise entre 1,0 et 2. Si l'exposant atteint -127 (00000000 binaire), le leader 1 n'est plus utilisé pour activer le sous-dépassement progressif.
De toute façon je sais que le problème est ici, mais je ne peux pas comprendre à cause de mon manque anglais.
Lire un peu IEEE754 et les valeurs dénormalisées. Ensuite, vous verrez ce que vous pouvez faire. –