Производится ли произведение двух констант каждый раз при его выполнении? - PullRequest
3 голосов
/ 19 февраля 2012

Например, если у меня есть:

if(x < 2*0.025) { ... }

Вычисляется ли 2*0.025 каждый раз?Или 0.05 подставляется так, что операция умножения не должна выполняться каждый раз?

Другими словами, более эффективно использовать 0.05 вместо 2*0.025?

Ответы [ 2 ]

5 голосов
/ 19 февраля 2012

Каждый известный мне компилятор реализует свертывание констант , то есть вычисляет константные выражения во время компиляции, поэтому нет никакой разницы. Стандарт, однако, не предписывает это:

Выражение константы может быть оценено во время перевода, а не во время выполнения, и, соответственно, может использоваться в любом месте, где константа может быть.

Вы можете явно отключить эту оптимизацию с некоторыми компиляторами. Например, -frounding-math отключает постоянное свертывание для выражений с плавающей запятой в gcc.

0 голосов
/ 19 февраля 2012

Выражения констант предварительно вычисляются.

...