2012-02-19 4 views
3

Например, если у меня есть:Производит ли произведение двух констант каждый раз, когда он выполняется?

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

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

Иными словами, эффективнее использовать 0.05 вместо 2*0.025?

ответ

5

Каждый компилятор, который я знаю, реализует constant folding, т. Е. Вычисляет постоянные выражения во время компиляции, поэтому нет никакой разницы. Однако стандарт не предусматривает этого:

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

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

0

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