2012-02-10 47 views
2

之間反覆鑄造混合各種框架和庫我經常看到這樣的是否有任何開銷在float和double

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

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

代碼是否有鑄造doublefloat之間的背部和反覆的任何開銷?

我主要興趣在編譯器,但會爲其他語言和編譯器高興起來投票的答案。

回答

4

floatdouble之間的鑄造是在ARM和x86兩種方向上的單個轉換指令。在某些情況下,編譯器可以消除這些轉換(當它可以證明它們不會影響計算結果時),但在列出的例子中不會出現這種情況。

因此,有少量的開銷。在高級界面邊界的一些額外演員將不會有明顯的效果。但是,如果可以避免,則不希望在緊密循環中轉換每個值。

3

是的,有一個開銷,因爲演員陣營導致轉換。 cpu中的格式不同。

擔心這一點,並編寫代碼來減少它是「過早優化」,只是不這樣做。如果出現性能問題,請使用儀器,找到並修復。 「最佳實踐」是編寫最清晰的代碼。

+0

+1爲「優化前期」 – rjstelling 2012-02-10 15:35:09