2012-02-10 2 views
2

Смешивание различных Каркасы и библиотеки я часто встречаю подобный кодЕсть ли накладные расходы в постоянно произнося между поплавком и двойным

float floatValue = 0.5f; 
float returnValue = 0.0f; 

returnValue = (float)[object someMethod:(double)floatValue]; //returns double 

Есть ли накладные расходы на литье назад и вперед между double и float?

Я в основном интересуюсь и компилятором , но с удовольствием отвечу ответы на другие языки и компиляторы.

ответ

4

Литье между float и double представляет собой единую инструкцию преобразования в обоих направлениях как на ARM, так и на x86. Есть некоторые случаи, когда компилятор может устранить эти преобразования (когда он может доказать, что они не будут влиять на результат вычисления), но это не так в примерах, подобных тем, которые вы указали.

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

3

Да, есть накладные расходы, потому что литье вызывает преобразование. Форматы в процессоре различны.

Беспокойство по поводу этого и написания кода для уменьшения его «предварительной зрелости оптимизации», просто нет. Если есть проблемы с производительностью, используйте инструменты, найдите их и исправьте. «Лучшая практика» - написать самый четкий код.

+0

+1 для "предварительной зрелости оптимизации" – rjstelling

Смежные вопросы