Например, если у меня есть:
if(x < 2*0.025) { ... }
Вычисляется ли 2*0.025 каждый раз?Или 0.05 подставляется так, что операция умножения не должна выполняться каждый раз?
2*0.025
0.05
Другими словами, более эффективно использовать 0.05 вместо 2*0.025?
Каждый известный мне компилятор реализует свертывание констант , то есть вычисляет константные выражения во время компиляции, поэтому нет никакой разницы. Стандарт, однако, не предписывает это:
Выражение константы может быть оценено во время перевода, а не во время выполнения, и, соответственно, может использоваться в любом месте, где константа может быть.
Вы можете явно отключить эту оптимизацию с некоторыми компиляторами. Например, -frounding-math отключает постоянное свертывание для выражений с плавающей запятой в gcc.
-frounding-math
Выражения констант предварительно вычисляются.