How about (assuming x is an int):
if (x & 0b0000001000000000)
x |= 0b1111110000000000; // sign extend
Then just convert it into a float.
How about (assuming x is an int):
if (x & 0b0000001000000000)
x |= 0b1111110000000000; // sign extend
Then just convert it into a float.