2011-09-18 87 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

如果您可以使用乘法,則可以在並行中完成乘法達到一定程度。