2011-09-18 56 views
5

好吧,这可能听起来像一个奇怪的问题,但它是一个有趣的问题。我为iOS编码,并被告知最好总是乘以而不是分割值,因为它更快。分倍慢于倍数?

我知道处理器这些天可能使这是一个非问题,但我的好奇心已经越来越好,我想知道如果任何人能够为我阐明这一点。

SO .....我的问题是这样的 -
是:

player.position = ccp(player.contentSize.width/2, winSize.height/2); 

慢:

player.position = ccp(player.contentSize.width * 0.5, winSize.height * 0.5); 
+1

这些事情是不一样的,除非'player.contentSize.width'和'winSize.height'是浮点数。 – icktoofay

+1

如果'player.contentSize.width'和'winSize.height'是整数,那么速度怎么样? –

+2

因为这段代码几乎肯定不在性能关键的循环中,所以几乎可以肯定无论你是分割还是相乘。只要着眼于编写清晰,简洁和健壮的代码,并且只在需要时才担心性能。 –

回答

4

对于相同的数据类型,大多数处理器的分频比乘法慢。在你的例子中,你的乘法是一个浮点运算,如果widthheight是整数类型,结果可能会有很大的不同,可能取决于你的处理器和你的编译器。

然而,大多数编译器(当然是GCC)都会将一个部门按照您的示例中的一个常数幂来转换为右移,在那里效率更高。这通常比乘法或除法要快。

7

是,除通常比乘法多慢。

但是,除以文字(或在编译时可以确定为常量的任何东西)时,编译器通常会优化除法。

+1

“文字是这样的”,他的意思是2的权力。然后它只是在转移。 – UncleO

+1

编译器还可以优化除以3,5和其他小数字。如果浮点模式被放宽,则FP分割将被乘以倒数代替。 – Mysticial

0

如果您可以使用乘法,则可以在并行中完成乘法达到一定程度。