Часто ми використовуємо мікроконтролери для того, щоб робити свої роботи на роботах, але потрібно робити деякі обчислення у десятковій формі. Використання змінних з плаваючою комою відбувається дуже повільно, оскільки автоматична бібліотека з плаваючою точкою автоматично включається (якщо у вас немає мікроконтролера високого класу). Тому ми зазвичай використовуємо арифметику з фіксованою точкою.
Щоразу, коли я це роблю, я просто використовую ціле число і пам'ятаю, де знаходиться десяткове місце. Однак потрібно певно подбати про те, щоб все було узгоджено, особливо коли обчислення включають змінні, де десяткова крапка знаходиться в іншому місці.
Я реалізував функцію atan2 з фіксованою точкою, але, оскільки я намагався видавити кожну останню краплю з обмеженою точністю (16 біт), я часто міняв би визначення десяткової крапки, і це змінюватиметься, коли я її налаштовував. Крім того, у мене були б деякі константи, як квазі-таблиця пошуку, яка сама десь має на увазі десяткове місце.
Я хочу знати, чи є кращий спосіб. Чи є бібліотека чи набір макросів, які можуть спростити використання змінних з фіксованою точкою, полегшуючи множення та ділення між змішаними змінними та дозволяючи декларувати десяткові числа чи постійні вирази, але автоматично перетворювати на потрібне подання фіксованої точки при компіляції час?