В одной из недавних тем, увидел в коде формулу
myFloat = (myLong/1000000.0)/30.0*100.0;
Т.к. теоретических знаний у меня не много, решил посмотреть на практике - влияет ли наличие скобок на оптимизацию кода при компиляции.
Я смотрел для UNO и настройках IDE 1.8.13 “по умолчанию”. (у автора было ESP8266).
Оказалось - не влияет (по крайней мере в данном случае), но и приведения к виду myFloat = myLong/300000.0; не делается.
myFloat = (myLong/1000000.0)/30.0*100.0; выполняется 1183 такта
myFloat = myLong/300000.0; выполняется 558 тактов
Дополнение. В комментариях отметили, что умножение выполняется быстрее деления, и что при ручном подсчете больше вероятность ошибки. С учетом этого, больше быстродействие у варианта
{
const float myTmp = (1/1000000.0)/30.0*100.0;
myFloat = myLong * myTmp; // выполняется 200 тактов
}
Конец дополнения.
Получается, для быстродействия, лучше сокращать вычисления в ручную.
Попутно удивился, что деление для Float может выполняться быстрее, чем для long
volatile long myLong = 123456789;
myFloat = myLong/300000.0; выполняется 560 тактов
myLong1 = myLong/300000; выполняется 630 тактов