为什么Android API中有这么多的浮点数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

Java中的默认浮点类型是double。如果你将一个常量硬编码2.5到你的程序中,Java会自动将它加倍。当您对可能从更高精度中受益的浮点数或整数进行操作时,类型会被“提升”为double。

但在Android API中,一切似乎都是从音量到矩形坐标的浮动。有一种称为RectF大多数绘图中使用的结构; F是浮动的。对于将推广的双打(float)很频繁的程序员来说真的很痛苦。难道我们都不同意Java代码是混乱和冗长的吗?

提问于
用户回答回答于

取决于CPU,不会有浮点单元(FPU)。所以它必须在Software中模拟FPU。浮点数比双数快。或者如果该设备具有FPU,浮点运算也可能会更快。

用户回答回答于

在没有FPU的设备上,单精度浮点操作比双精度等价操作快得多。因此,Android框架提供了一个复制一些java.lang.Math函数的FloatMath类,但使用float参数而不是double。

在具有FPU的最新Android设备上,单精度和双精度运算所需的时间大致相同,并且明显快于软件实现。(“为性能设计”页面是为G1编写的,需要更新以反映各种更改。)

顺便提一下,写“2.5f”或“(float)2.5”并不重要。无论哪种方式,javac都知道你想要一个单精度浮点数常量,这就是它所产生的。你可以通过编写一个示例程序并检查生成的字节码来验证。

扫码关注云+社区