Эффективность сравнений в C ++? (abs (X)> 1 против abs (x)! = 0) - PullRequest
4 голосов
/ 09 июля 2009

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

Текущий код:

if(abs(newpos-oldpos) > 1){
    .....
}

Более эффективно использовать следующее?

if(abs(newpos-oldpos) != 0){
    ....
}

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

Ответы [ 12 ]

0 голосов
/ 09 июля 2009

Вместо того, чтобы гадать, что будет делать компилятор, почему бы просто не посмотреть на полученный код сборки или измерить его выполнение?

0 голосов
/ 09 июля 2009

Разница в производительности была бы незначительной, но первая была бы более эффективной (на мой взгляд), поскольку она требует меньше операций, чем! =. Кроме того, 2 оператора означают разные вещи, например, попробуйте abs (newpos - oldpos) = 0,5 и посмотрите, если две переменные не являются целыми числами.

...