Często używamy mikrokontrolerów do robienia rzeczy w naszych robotach, ale musimy wykonać pewne obliczenia dziesiętne. Używanie zmiennych zmiennoprzecinkowych jest bardzo wolne, ponieważ programowa biblioteka zmiennoprzecinkowa jest automatycznie dołączana (chyba że masz wysokiej klasy mikrokontroler). Dlatego zazwyczaj używamy arytmetyki punktów stałych.
Ilekroć to robię, po prostu używam liczby całkowitej i pamiętam, gdzie jest miejsce dziesiętne. Jednak należy zadbać o to, aby wszystko było spójne, szczególnie gdy obliczenia obejmują zmienne, w których przecinek dziesiętny znajduje się w innym miejscu.
Zaimplementowałem funkcję atan2 o stałym punkcie, ale ponieważ próbowałem wycisnąć każdą ostatnią kroplę o ograniczonej precyzji (16 bitów), często zmieniałem definicję miejsca przecinka dziesiętnego i zmieniałbym się, gdy go poprawiałem. Ponadto miałbym pewne stałe, jako quasi-przeglądową tabelę, które same mają gdzieś sugerowaną kropkę dziesiętną.
Chcę wiedzieć, czy jest lepszy sposób. Czy istnieje biblioteka lub zestaw makr, które mogą uprościć stosowanie zmiennych stałoprzecinkowych, ułatwiając mnożenie i dzielenie między zmiennymi mieszanymi oraz pozwalając na deklarację liczb dziesiętnych lub wyrażeń stałych, ale automatycznie konwertując do pożądanej reprezentacji stałych punktów podczas kompilacji czas?