添加两个不断增长的数字的最有效方法

时间:2012-01-17 15:37:13

标签: java android performance

将两个数字连续添加到一起的最有效方法是什么?

例如,我有以下内容:

totalFloat = totalFloat + someFloatVar

必须有一种更有效的方式,对吧?在用户决定停止任务之前,这些数字会不断累加。此外,someFloatVar每次都不同。

我知道我可以totalFloat += someFloatVar,但我的印象是效率明智是一样的。我正在寻找的东西不会降低应用程序的整体速度和性能。

如果没有,这是添加两个数字的最佳方式(可能会非常大吗?)

在这种情况下,我不断更新里程。因此,这可能是5.678米或895.67米,或更大。

6 个答案:

答案 0 :(得分:1)

您可以使用以下语法删除其中一个totalFloat

totalFloat += someFloatVar;

但这相当于你在程序效率方面所写的内容(唯一的好处就是你不必写得那么多)。我想这听起来像是一个过早优化的案例;添加两个数字非常有效,优化它几乎没有意义。

编辑:您可以做的,也许是每次您想要更新任何显示的数字(如果您显示它)或任务停止时,您都可以计算自那时起的时间任务已经开始,然后将someFloatVar与一个数字相乘,具体取决于该时间,而不是多次添加。

答案 1 :(得分:1)

确保您的值是基元。没有比你拥有的更好的方法。添加是所有微处理器的原生,并没有比这更快。如果你对你的值进行一些计算,那么你将花费更多的CPU。

答案 2 :(得分:1)

简短回答是的,这是添加两个浮点数的最有效方法。很长的回答是的,但这应该不是问题。这代表了机器代码中的单个指令,因此没有其他方法可以使它更快。我相信大多数Android处理器都有FPU,这意味着它非常快。从技术上讲,你可能能够进行一些定点数学计算,但处理器,即使在移动设备上,也是如此荒谬,快速通过使用定点数学的麻烦远远超过工程。

http://developer.android.com/guide/practices/design/performance.html

最后你应该编写代码,因为它最有意义,测量运行速度,如果速度不够快,那么使用分析器确定代码花费最多时间的位置并使用一个更好的算法,缓存,更少的呼叫等。记住古老的说法“让它工作,使它正确,使它快速。并重复。”

答案 3 :(得分:1)

  

必须有一种更有效的方式,对吧?

没有更有效的方法可以为变量添加数字。事实上,这可能是2或3台机器指令......只需几纳秒。

然而......

  

在用户决定停止任务之前,这些数字会不断累加。

更好的想法是测量开始和停止事件之间的持续时间,并且当停止事件发生时,将变量增加一个与该持续时间成比例的值。

答案 4 :(得分:0)

你拥有它的方式很好(尽管你可以写totalFloat += someFloatVar)。

我唯一担心这种情况的方法是你是否正在使用String。字符串是你可能不想连续添加数据的唯一时间(但使用StringBuilder并且它的.append()方法会很有效,但这部分完全不在话题:))。

或者,给用户一个上限!一旦数字变得太大而无法满足您的喜好,请自行停止该过程。另一种可能性是不要使用类似while(true)之类的语法。请尽快更新号码。

答案 5 :(得分:0)

我不完全确定你在问什么。

我猜你所得到的是这样的:

float someFloatVar = 0.5;
float totalFloat = 0.0;
while(true){
    totalFloat += someFloatVar;
}

鉴于someFloatVar是静态的,并且每次添加它都不会改变,你可以这样做(虽然效率可以忽略不计)。记录启动任务的时间戳以及任务停止时间减去当前时间戳记的时间戳。确定加法率(可能是100秒或类似值),然后将someFloatVar乘以rateOfAddition*timeDiffSecs,并将其添加到原始值(totalFloat)。