As written, your macro will only return one or the highest possible value. It needs to be modified as so:
#define FRAC16(x) (x < 1 ? ( x >= -1 ? x * 0x7FFF : 0x8000) : 0x7FFF)
If you'll look at your macro, you only have the value one, not a x < 1 test at the start of your macro logic.
---Tom