在Android API的最新更新中,
在旧版本的Android中,使用android.util.FloatMath在处理浮点数时出于性能考虑是推荐的。然而,在现代硬件上,双精度浮点数与单精度浮点数一样快(尽管它们需要更多的内存),并且在最近的Android版本中,由于JIT优化java.lang.Math的方式,FloatMath实际上比使用java.lang.Math慢。因此,如果您只针对Froyo及以上版本进行开发,则应使用Math代替FloatMath。 here还提到,双精度浮点数和单精度浮点数在现代硬件上的速度相等。
我正在一个应用程序中使用一些三角函数数学运算(针对Froyo及以上版本),但不需要高精度,所以到目前为止我一直在使用浮点数和
然而,“使用
简而言之,哪一个更可取?
FloatMath
被标记为以下lint警告:在旧版本的Android中,使用android.util.FloatMath在处理浮点数时出于性能考虑是推荐的。然而,在现代硬件上,双精度浮点数与单精度浮点数一样快(尽管它们需要更多的内存),并且在最近的Android版本中,由于JIT优化java.lang.Math的方式,FloatMath实际上比使用java.lang.Math慢。因此,如果您只针对Froyo及以上版本进行开发,则应使用Math代替FloatMath。 here还提到,双精度浮点数和单精度浮点数在现代硬件上的速度相等。
我正在一个应用程序中使用一些三角函数数学运算(针对Froyo及以上版本),但不需要高精度,所以到目前为止我一直在使用浮点数和
FloatMath
,并且没有必要切换到双精度。然而,“使用
Math
而不是FloatMath
”建议并未说明如果需要浮点数结果应该使用哪一个。简而言之,哪一个更可取?
float foo = FloatMath.sin(bar);
或者
float foo = (float) Math.sin(bar);
顺便说一句,我只有一个Froyo设备,所以我无法进行适当的基准测试。
从API级别22开始,FloatMath类已被弃用,建议使用通常的Math类。
int
/float
/double
相对性能的说法持怀疑态度。float
可能会因为较小的缓存占用而略微更快,在iPhone 3GS上,float
则明显更快,因为它可以使用NEON单元而不是较慢的VFP单元(NEON单元不支持双精度浮点数);这可能是iDevice特定的。此外,自动向量化JIT将自动使float
比double
更受益,因为它可以在每个向量寄存器中容纳更多的float
。 - tc.FloatMath
- "该类从API级别22开始已经过时。请改用Math
。"。 - Pang