In my opinion, a more effective approach would be to interpret a fixed point as a separator between high and low bits. In this case, the scaling becomes arithmetic shifting. For example, decimal float number 5.25 = 101.01 in binary representation.