Programa de Python para representar el número flotante como hexadecimal según el estándar IEEE 754

Requisito previo: Números de punto flotante estándar IEEE 754
Dado un número de punto flotante, la tarea es encontrar la representación hexadecimal para el número según el estándar IEEE 754.
El estándar IEEE para aritmética de punto flotante (IEEE 754) es un estándar técnico para el cálculo de punto flotante que fue establecido en 1985 por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE). El estándar abordó muchos problemas encontrados en las diversas implementaciones de coma flotante que dificultaban su uso confiable y reducían su portabilidad. El punto flotante estándar IEEE 754 es la representación más común hoy en día para números reales en computadoras, incluidas las PC basadas en Intel, Mac y la mayoría de las plataformas Unix. 
 

Ejemplos: 
 

Input :  -6744.90
Output :  C5D2C733

Input :  -263.3
Output :  C383A666

Acercarse : 
 

  • Comprueba si el número es positivo o negativo. Guarde el signo como 0 para positivo y 1 para negativo, y luego convierta el número en positivo si es negativo.
  • Convierte el número de coma flotante a binario .
  • Separe la parte decimal y la parte entera.
  • Calcula el exponente (E) y conviértelo a binario.
  • Encuentra la mantisa.
  • Concatenar el signo de la mantisa, el exponente y la mantisa.
  • Conviértelo a hexadecimal.

Escribamos un programa Python para representar un número flotante como hexadecimal según el estándar IEEE 754. 
 

Python3

# Function for converting decimal to binary
def float_bin(my_number, places = 3):
    my_whole, my_dec = str(my_number).split(".")
    my_whole = int(my_whole)
    res = (str(bin(my_whole))+".").replace('0b','')
 
    for x in range(places):
        my_dec = str('0.')+str(my_dec)
        temp = '%1.20f' %(float(my_dec)*2)
        my_whole, my_dec = temp.split(".")
        res += my_whole
    return res
 
 
 
def IEEE754(n) :
    # identifying whether the number
    # is positive or negative
    sign = 0
    if n < 0 :
        sign = 1
        n = n * (-1)
    p = 30
    # convert float to binary
    dec = float_bin (n, places = p)
 
    dotPlace = dec.find('.')
    onePlace = dec.find('1')
    # finding the mantissa
    if onePlace > dotPlace:
        dec = dec.replace(".","")
        onePlace -= 1
        dotPlace -= 1
    elif onePlace < dotPlace:
        dec = dec.replace(".","")
        dotPlace -= 1
    mantissa = dec[onePlace+1:]
 
    # calculating the exponent(E)
    exponent = dotPlace - onePlace
    exponent_bits = exponent + 127
 
    # converting the exponent from
    # decimal to binary
    exponent_bits = bin(exponent_bits).replace("0b",'')
 
    mantissa = mantissa[0:23]
 
    # the IEEE754 notation in binary    
    final = str(sign) + exponent_bits.zfill(8) + mantissa
 
    # convert the binary to hexadecimal
    hstr = '0x%0*X' %((len(final) + 3) // 4, int(final, 2))
    return (hstr, final)
 
# Driver Code
if __name__ == "__main__" :
    print (IEEE754(263.3))
    print (IEEE754(-263.3))
Producción: 

4383A666
C383A666

 

Publicación traducida automáticamente

Artículo escrito por Yash_R y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *