Fix bug in fix_mul with a tiny overflow causing a negative result
Rework fix_mul to be cleaner, use helpful macro
fix_exp implementation and tests.