import math
def read_float_24(value):
sign = (-1) ** ((value & 0x800000) >> 23)
exponent = 2 ** (((value & 0x7e0000) >> 17) - 32)
mantissa = (value & 0x01ffff) * 2 ** -17
return sign * exponent * (1 + mantissa)
def write_float_24(value):
if value >= 0:
sign = 0
else:
sign = 1
if value != 0:
exponent = math.floor(math.log2(abs(value)))
else:
exponent = -32
if value != 0:
mantissa = abs(value) / 2**exponent - 1
else:
mantissa = 0
return (sign << 23) + ((exponent+32) << 17) + math.floor(mantissa * 2 ** 17)