首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Android API中有这么多浮点数?

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

Stack Overflow用户
提问于 2010-03-19 14:56:41
回答 5查看 4.5K关注 0票数 16

Java中默认的浮点类型是double。如果您将像2.5这样的常量硬编码到您的程序中,Java会自动将其设置为双精度。当你在浮点数或整型数上进行可能从更高精度中受益的操作时,该类型被‘提升’为双精度型。

但在Android API中,从音量到矩形坐标,一切似乎都是浮动的。在大多数绘图中有一个叫做RectF的结构;F代表浮点数。对于经常将提升的替身转换回(float)的程序员来说,这真的是一种痛苦。难道我们不都同意Java代码已经足够凌乱和冗长了吗?

通常,数学协处理器和加速器在Java中更喜欢double,因为它对应于内部类型之一。是不是Android的Dalvik VM出于某种原因更喜欢浮动?或者所有的浮点仅仅是API设计中错误的结果?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-19 16:45:12

根据CPU的不同,将没有浮点单元(FPU)。因此,它必须在软件中模拟FPU。这对于浮点型比双精度型更快。或者,如果设备有FPU,那么使用浮点数可能也会更快。

票数 8
EN

Stack Overflow用户

发布于 2010-03-20 01:26:38

在没有FPU的设备上,单精度浮点运算比双精度浮点运算要快得多。正因为如此,Android框架提供了一个FloatMath类,它复制了一些java.lang.Math函数,但使用了浮点参数而不是双精度。

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

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

票数 43
EN

Stack Overflow用户

发布于 2010-03-19 16:05:27

对于不需要太多有效数字(如屏幕偏移量)的指标,使用doubles而不是floats将是内存低效的。在移动设备上,最大限度地提高内存消耗效率至关重要,因为在移动设备上,几乎所有资源都非常宝贵。而且,在处理像Rect这样的对象时--这些对象可能会被数千人分配--减少多余的位数显然是至关重要的。

我相信还有其他原因:-)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2475494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档