fork(1) download
  1.  
  2. #!/usr/bin/env python3
  3. from math import inf, nan
  4.  
  5.  
  6. def minifloat(unsigned_byte):
  7. """0b0_1000_001 -> 1152.0"""
  8. # https://e...content-available-to-author-only...a.org/wiki/Minifloat#Example
  9. assert 0 <= unsigned_byte < 0x100
  10. # SEEEEMMM
  11. negative = (unsigned_byte & 0b10000000) >> 7
  12. exponent = (unsigned_byte & 0b01111000) >> 3
  13. mantissa = (unsigned_byte & 0b00000111) >> 0
  14. if exponent == 0b1111:
  15. if mantissa == 0: # infinity
  16. x = inf
  17. else: # not a number
  18. x = nan # S1111MMM (MMM!=0)
  19. elif exponent == 0:
  20. if mantissa == 0: # zero
  21. x = 0.0
  22. else: # subnormal
  23. x = float(mantissa)
  24. else: # isnormal
  25. x = (1 + mantissa / 8.0) * 2**(exponent - (-2))
  26. return -x if negative else x
  27.  
  28. print(minifloat(int(input(), 2)))
Success #stdin #stdout 0.03s 28376KB
stdin
01110110
stdout
114688.0