2012-11-05 5 views
1

Как следующие два блока псевдокода сравниваются с точки зрения скорости как для скомпилированных языков, так и для интерпретируемых языков? (Игнорирование числа цифр)Производительность вычислительных констант

По существу, есть ли потеря производительности за счет записи переменных как функции нескольких констант, а не вычислений заранее? Это часто делает код более понятным.

permanentNum = (3.1416/3) + 1.5708 
return permanentNumber/userInputNumber 

.

permanentNum = 2.6179 
return permanentNumber/userInputNumber 

Спасибо!

+1

«Интерпретированные» языки в наши дни часто компилируются JIT, поэтому различие, которое вы делаете, размыто в лучшем случае – Nemo

ответ

3

Комментарий Митча Пшеница абсолютно верно; оптимизация - это то, что нужно делать после того, как у вас есть четкий и правильный код, и только при необходимости.

Чтобы ответить на вопрос, это, очевидно, зависит от языка. Любой достойный компилятор для C-подобных языков имеет постоянный сгибательный оптимизационный проход. В GCC, или в javac Oracle, или в любом широко используемом компиляторе ваши два примера будут генерировать один и тот же код.

Интерпретированные языки, вероятно, достаточно медленны, что стоимость нескольких дополнительных арифметических операций не является вашим узким местом, независимо от того, постоянно ли она складывается во время разбора или нет. :-)

+0

А, так «постоянный складной» - это тот термин, который я искал. Я на самом деле работаю над приложением C#, где этот вопрос снова возник, и я решил, наконец, получить его. Я уверен, что компилятор C# делает такую ​​оптимизацию. – Wehrdo

+0

Он делает ........ –

3

Начните с стремления к ясности кода.

Затем измерьте производительность. Если есть проблема с производительностью, определите узкие места.

Любые узкие места вряд ли будут в назначении констант (скомпилированный или интерпретируемый код).

1

Компиляторы обычно оптимизируют такие константы, поэтому даже если вы напишете (3.1416/3) + 1.5708, значение, которое будет в вашем объектном коде, равно 2.6179. Переводчики могут сделать то же самое, но поскольку они делают это во время выполнения, то да, производительность будет ниже.

Однако разница, вероятно, будет незначительной, поэтому, как сказал Митч Пшеница, вы должны одобрить четкость кода. Теоретический анализ - это одно, но единственный способ убедиться в том, каковы фактические узкие места вашего конкретного кода (в вашей конкретной среде) - это тестирование, профилирование, измерение.