Advertisement
Glaas2

Representacion flotante SIC/XE

Oct 19th, 2022 (edited)
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.19 KB | Science | 0 0
  1. """(0.00876545)d
  2.  
  3. convirtiendo a binario (12 cifras significativas)
  4.  
  5. 0.00876545 x 2 = 0.004382725
  6. 0.00438272 x 2 = 0.00876544
  7. 0.00876544 x 2 = 0.01753088
  8. 0.01753088 x 2 = 0.03506176
  9. 0.03506176 x 2 = 0.07012352
  10. 0.14024704 x 2 = 0.28049408
  11. 0.56098816 x 2 = 1.12197632
  12. 0.12197632 x 2 = 0.24395264
  13. 0.48790528 x 2 = 0.97581056
  14. 0.97581056 x 2 = 1.95162112
  15. 0.95162112 x 2 = 1.90324224
  16. 0.90324224 x 2 = 1.80648448
  17.  
  18. (0.00876545)d = (0000 0010 0111)b = 0.000000100111*2E0
  19.  
  20. Normalizando
  21.  
  22. (0.00876545)d = 0.000000100111*2E0 = 0.100111E-6
  23.  
  24. exponente = -6 + 1024 = (1018)d = (11 1111 1010)b
  25.  
  26. llenando el formato
  27.  
  28. signo(1)    exponente(11)   fraccion (36)
  29. 0       011 1111 1010   100111000000000000000000000000000000
  30.  
  31. ------------------------------------------------------------------------
  32.  
  33. (-0.00876545)d
  34.  
  35. convirtiendo a binario (12 cifras significativas)
  36.  
  37. 0.00876545 x 2 = 0.004382725
  38. 0.00438272 x 2 = 0.00876544
  39. 0.00876544 x 2 = 0.01753088
  40. 0.01753088 x 2 = 0.03506176
  41. 0.03506176 x 2 = 0.07012352
  42. 0.14024704 x 2 = 0.28049408
  43. 0.56098816 x 2 = 1.12197632
  44. 0.12197632 x 2 = 0.24395264
  45. 0.48790528 x 2 = 0.97581056
  46. 0.97581056 x 2 = 1.95162112
  47. 0.95162112 x 2 = 1.90324224
  48. 0.90324224 x 2 = 1.80648448
  49.  
  50. (0.00876545)d = (0000 0010 0111)b = 0.000000100111*2E0
  51.  
  52. Normalizando
  53.  
  54. (0.00876545)d = 0.000000100111*2E0 = 0.100111E-6
  55.  
  56. exponente = -6 + 1024 = (1018)d = (11 1111 1010)b
  57.  
  58. llenando el formato
  59.  
  60. signo(1)    exponente(11)   fraccion (36) (48 bits)
  61. 1       011 1111 1010   100111000000000000000000000000000000
  62. -------------------------------------------------------------------------
  63. (256.0876545)d
  64.  
  65. convirtiendo a binario (12 cifras significativas)
  66.  
  67. Parte entera        Parte fraccionaria
  68. 256 % 2 = 0     0.0876545   x 2 = 0.175309
  69. 128 % 2 = 0     0.175309    x 2 = 0.350618
  70. 64  % 2 = 0     0.350618    x 2 = 0.701236
  71. 32  % 2 = 0     0.701236    x 2 = 1.402472
  72. 16  % 2 = 0     0..402472   x 2 = 0.804944
  73. 8   % 2 = 0     0.804944    x 2 = 1.609888
  74. 4   % 2 = 0     0.609888    x 2 = 1.219776
  75. 2   % 2 = 0     0.219776    x 2 = 0.439552
  76. 1   % 2 = 1     0.439552    x 2 = 0.879104
  77.             0.879104    x 2 = 1.758208
  78.             0.758208    x 2 = 1.516416
  79.             0.516416    x 2 = 1.032832
  80.  
  81.  
  82. (256.0876545)d = (1 0000 0000 . 0001 0110 0111)b = 1 0000 0000 . 0001 0110 0111 x 2E0
  83.  
  84.  
  85.  
  86. Normalizando
  87.  
  88. (256.0876545)d = (1 0000 0000 . 0001 0110 0111)b = .1 0000 0000 0001 0110 0111 x 2E9
  89.  
  90. exponente = 9 + 1024 = (1033)d = (100 0000 1001)b
  91.  
  92. llenando el formato
  93.  
  94. signo(1)    exponente(11)   fraccion (36)
  95. 0       100 0000 1001   100000000000101100111000000000000000
  96. """
  97. ###//////////////////////////// py
  98.  
  99. # abriendo y cerrando archivo de manera automatica
  100. with open("datos.txt") as archivo:
  101.     # leer los datos y guardar en lista
  102.     lista = list(archivo)
  103.  
  104. # elimina los saltos de linea
  105. datos = [s.strip() for s in lista]
  106.  
  107.  
  108. def a_binario(numero):
  109.     binario = 0
  110.     decimal = numero
  111.     i = 0
  112.     while decimal > 0:
  113.         digito = decimal % 2
  114.         decimal = int(decimal // 2)
  115.         binario = binario + digito * (10**i)
  116.         i = i + 1
  117.     return str(binario).zfill(24)
  118.  
  119.  
  120. def comp_2(binario):
  121.     binario = str(binario)
  122.     # se hace complemento a 1 con auxiliar y se suma 1
  123.     bin_2 = binario.replace("1", "a")
  124.     bin_2 = bin_2.replace("0", "1")
  125.     bin_2 = bin_2.replace("a", "0")
  126.     return int(bin_2, 2) + 1
  127.  
  128.  
  129. # Detecta si el dato es positivo, negativo o string recorriendo cada dato en la lista
  130. for x in datos:
  131.     ##### numero positivo
  132.     if x.isnumeric():
  133.         x = int(x)
  134.         binario = a_binario(x)
  135.         print(
  136.             "DEC: " + str(x)
  137.             + " BIN: " + str(binario)
  138.             + " HEX: {0:0>6X}\n".format(int(binario, 2))
  139.         )
  140.     # 0:X formatea en hex y el 0>6 la long final del hex. int(dato, base)
  141.  
  142.     ##### numero negativo
  143.     # Detecta si la cadena empieza con '-' y lo elimina de la cadena
  144.     elif x.startswith("-"):
  145.         y = x.lstrip("-")
  146.         y = int(y)
  147.         binario = a_binario(y)
  148.         bin2 = comp_2(binario)
  149.         print(
  150.             "DEC: " + str(x)
  151.             + " {0:b} ".format(bin2)
  152.             + " HEX: {0:0>6X}\n".format(bin2)
  153.         )
  154.  
  155.     ##### cadena
  156.     else:
  157.         hexa = x.encode("ascii")
  158.         hexa = hexa.hex()
  159.         hexa = str(hexa.upper())
  160.         print("input: " + str(x) + " rep: " + hexa + "\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement