Я занимаюсь разработкой для платформы AVR, и у меня есть вопрос. Я не хочу, чтобы библиотека с плавающей запятой была связана с моим кодом, но мне нравится концепция наличия аналоговых значений в диапазоне 0,0 ... 1,0 вместо 0 ... 255 и 0 ... 1023, в зависимости от четности использую ли я порт в качестве входа или выхода.
Поэтому я решил умножить аргументы функций ввода / вывода на 1023.0 и 255.0 соответственно. Теперь мой вопрос: если я реализую разделение следующим образом:
#define analog_out(port, bit) _analog_out(port, ((uint8_t)((bit) * 255.0)))
Будет ли GCC (с включенным флагом -O3) оптимизировать умножения с плавающей запятой во время компиляции, известные во время компиляции и приведенные к целочисленному типу, в целочисленные операции? (Я знаю, что при использовании этих макросов с непостоянными аргументами оптимизация невозможна; я просто хочу знать, будет ли это сделано в другом случае.)