Так, например: MassDelta1024 = ((uint64_t)MassSpeed_dph * TimeDelta * 1024u + SystemSpeedDivider / 2) / SystemSpeedDivider;// Account for total mass for the period
Получаю целые значения в 1/1024 от целевого разрешения. Благодаря запасу размера, нет проблем с переполнением. Переменные, участвующие в расчёте - вычисляются заранее, перед запуском рабочего цикла. Умножения/деления на 2^N делаются быстро, сдвигами. Остаётся одна операция с делением uint64/uint64. ЦП имеет поддержку целочисленного деления на 32 бита, поэтому за несколько коротких подходов, вычисляет 64/64.
Возможность переполнения проверена для крайних значений переменных, которые защищены от выхода за допустимые рамки.
А плавающую точку и нужное округление разрядов, закладываю потом при выводе результата вовне, в собственных функциях печати с параметрами. Для каждой физической величины - своя функция, которая берёт нужное положение десятичной точки из конфигурации устройства или из переменных процесса, если требуется.