fork download
  1. # decimalモジュールをインポートする
  2. from decimal import Decimal, getcontext
  3.  
  4. # 16進数128ビット浮動小数点数を10進数に変換する関数
  5. def hex_to_decimal128(hex_str):
  6. # 16進数を2進数に変換する
  7. bin_str = bin(int(hex_str, 16))[2:].zfill(128)
  8. # 2進数を符号、指数、仮数に分解する
  9. sign = bin_str[0]
  10. exponent = bin_str[1:16]
  11. significand = bin_str[16:]
  12. # 指数を10進数に変換する
  13. exponent = int(exponent, 2) - 16383
  14. # 仮数を10進数に変換する
  15. significand = int(significand, 2) / (1 << 112)
  16. # 10進数を計算する
  17. decimal = Decimal((-1)**int(sign, 2) * (1 + significand) * 2**exponent)
  18. # 10進数を返す
  19. return decimal
  20.  
  21. print(hex_to_decimal128('0x40024000000000000000000000000000'))
  22.  
Success #stdin #stdout 0.04s 10420KB
stdin
Standard input is empty
stdout
10