在Android API的FloatMath
的最新更新標有以下皮棉警告:使用FloatMath或Math和演員?
在老版本的Android,採用浮筒上操作時建議使用性能的原因android.util.FloatMath是 。然而,現代硬件雙打上的 與浮動一樣快(雖然它們會帶來更多內存),而在最近的Android版本中,由於JIT優化的方式,FloatMath實際上比使用java.lang.Math慢 java .lang.Math。因此,如果 僅針對Froyo及更高版本,則應使用Math而不是FloatMath。
還提到了here在最近的硬件上double和float的速度是相等的。
我在一個應用程序中使用了一些三角函數(目標函數爲Froyo和以上),但不需要高精度,所以我一直使用浮點數和FloatMath
,並且沒有任何需要切換到雙打。
但是,「使用Math
而不是FloatMath
」 - 建議不會說如果float是所需結果,則使用哪一個。
總之,哪一個更好?
float foo = FloatMath.sin(bar);
或
float foo = (float) Math.sin(bar);
在一個側面說明,我只有一個Froyo的設備,所以我真的不能做我自己的任何適當的標杆。
作爲API級別22 FloatMath級的已棄用,取而代之的常規數學類的。
我認爲你引用的文字表示如果float是所需的結果,則應該使用數學而不是floatmath和cast。 – 2013-02-28 19:17:34
我會採用任何有關'int' /'float' /'double'相對性能的聲明來獲得一大片鹽。簡單地說,由於較小的緩存佔用量,「float」可能稍微快一點;在iPhone 3GS上,「float」顯着更快,因爲它可以使用NEON單元而不是較慢的VFP單元(NEON單元不支持雙倍);這可能是iDevice特有的。此外,自動矢量化JIT將自動受益'float'多於'double',因爲它可以將更多的數據放入每個向量寄存器中。 – 2013-03-28 20:23:49
難道浮子都是作爲最新Android設備上的雙打存儲的嗎?! – Philip 2013-12-09 04:16:22