Есть ли накладные расходы при многократном приведении между float и double? - PullRequest
2 голосов
/ 10 февраля 2012

Смешивание различных фреймворков и библиотек. Я часто вижу код, подобный этому

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

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

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

3 голосов
/ 10 февраля 2012

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

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

...