Android 开发者网站上的一个页面提到你应该(引用):“Avoid Using Floating-Point”(链接:Performance Tips)
看完整篇文章,感觉里面的一些条目可能有点过时了(可能是几年前写的)。
我想知道这个指南今天是否仍然有效,或者使用浮点类型是否真的很糟糕(x2 性能下降,即使在今天的硬件上)?
Android 开发者网站上的一个页面提到你应该(引用):“Avoid Using Floating-Point”(链接:Performance Tips)
看完整篇文章,感觉里面的一些条目可能有点过时了(可能是几年前写的)。
我想知道这个指南今天是否仍然有效,或者使用浮点类型是否真的很糟糕(x2 性能下降,即使在今天的硬件上)?
ARMv6 等较旧的 Android 设备没有处理器支持浮点运算。如果您坚持使用 Java,您将通过仿真来使用浮点数,尽管它可以在较旧的设备上运行,但如果您在显示循环中使用浮点数或类似更新 20 次以上的东西,您的软件将非常缓慢且耗电每秒。
ARMv7 及更高版本具有浮点算术支持,因此即使您认为您的软件也必须支持旧设备,定点或整数算术将是首选,但这并不是什么大问题。
请参阅 OpenGL/高性能 Android 应用程序的相关问题: Android NDK OpenGL 应用程序的浮点还是定点?
恕我直言,避免使用浮点的声明是荒谬的。如果需要浮点,则需要浮点。队伍的尽头。当你需要它时,你不应该避免它。因为,您可能会尝试使用整数找到解决方法,但是对于程序员阅读/调试代码而言,计算会更复杂且不太清晰。
当您查看关于 SO 的华丽答案时,您会发现浮点运算 (FLOPS) 仍然非常快。 沙桥和 haswell SSE2/AVX/AVX2 的每个周期的 FLOPS。他们谈到每个周期有多个 FLOPS!