Bri*_*ian 16 floating-point android dalvik
Java中的默认浮点类型是double.如果您将常量硬编码2.5
到程序中,Java会自动将其设置为double.当您对可能从更高精度中获益的浮点数或整数执行操作时,类型将"提升"为double.
但是在Android API中,一切似乎都是从声音音量到矩形坐标的浮动.RectF
在大多数绘图中都有一种叫做结构的结构; F代表浮动.对于那些(float)
经常提升双打的程序员而言,这真的是一种痛苦.难道我们都不同意Java代码是如此混乱和冗长吗?
通常数学协处理器和加速器在Java中更喜欢双重,因为它对应于一种内部类型.有没有关于Android的Dalvik VM出于某些原因更喜欢花车?或者所有的浮动都是API设计中的变态的结果?
fad*_*den 43
在没有FPU的设备上,单精度浮点运算比双精度运算速度快得多.因此,Android框架提供了一个FloatMath类,它复制了一些java.lang.Math函数,但使用了float参数而不是double.
在最近的带有FPU的Android设备上,单精度和双精度操作所需的时间大致相同,并且明显快于软件实现.("为性能设计"页面是为G1编写的,需要更新以反映各种变化.)
顺便说一句,写"2.5f"或"(浮动)2.5"并不重要.无论哪种方式,javac都知道你想要一个单精度浮点常数,这就是它产生的.您可以通过编写示例程序并检查生成的字节码来验证这一点.
根据CPU,不会有浮点单元(FPU).因此它必须模拟软件中的FPU.对于Float而言,这比Double更快.或者,如果设备具有FPU,则Floats可能也会更快.
对于不需要太多有效数字的指标(例如屏幕偏移),使用double
s而不是float
s 将是内存效率低的.在移动设备上,最大限度地提高内存消耗效率至关重要,因为几乎所有资源都非常宝贵.并且,当处理Rect
可能由数千个分配的对象(例如s)时,减少多余的比特显然是至关重要的.
我确定还有其他原因:-)