Qual è il modo migliore per fare matematica in virgola fissa?

Ho bisogno di accelerare un programma per Nintendo DS che non ha una FPU, quindi ho bisogno di cambiare la matematica in virgola mobile (che è emulata e lenta) in virgola fissa.

Come ho iniziato, ho cambiato i float in ints e ogni volta che ho avuto bisogno di convertirli, ho usato x >> 8 per convertire la variabile punto fisso x nel numero reale e x << 8 per convertire in punto fisso. Presto ho scoperto che era imansible tenere traccia di ciò che doveva essere convertito e ho anche capito che sarebbe stato difficile modificare la precisione dei numeri (8 in questo caso).

La mia domanda è: come dovrei renderlo più facile e veloce? Dovrei creare una class FixedPoint, o semplicemente un typedef di FixedPoint8 o una struct con alcune funzioni / macro per convertirle, o qualcos’altro? Dovrei inserire qualcosa nel nome della variabile per mostrare che è un punto fisso?