2010-08-02 37 views
0

什麼是更有效的在PHP什麼是更有效的N-1 <X或N <= X

if ($n-1 < $x) 

if ($n <= $x) 

任何人都知道嗎?

+7

使用'<='可能更好,因爲它就是這樣。另外,我猜測它效率稍高一點,但不夠重要。 – Adrian 2010-08-02 18:46:39

+2

同樣,雖然'<='讀取「小於或等於」,但這並不意味着計算機執行兩個單獨的操作來實現此目的。看到這個答案:http://stackoverflow.com/questions/1430706/comparison-efficiency/1430713#1430713 – 2010-08-02 18:49:43

+2

今天所有的微觀優化問題是什麼? – Malfist 2010-08-02 19:04:26

回答

14

微小差別,但if ($n <= $x)表現得更加明顯。

+1

不知道爲什麼有人低估了這個,所以+1反擊它。 – 2010-08-02 18:48:47

+0

爲什麼這是最有價值的?這甚至沒有正確回答這個問題,第二個更有效。 – 2010-08-02 19:17:12

+3

我的答案的重點是,它不會在所有問題上感到困擾,你應該更喜歡清晰的語法。我猜想有10人同意。 – Triptych 2010-08-02 19:20:15

6

大概($n <= $x)因爲少了一個操作(沒有扣除)。但是,這隻對整數有效,差異很可能不重要。

+0

如果您使用的語言沒有自動選擇更高效的說明,那麼您應該記錄針對您的語言實施的錯誤優化錯誤。 – 2010-08-02 19:49:41

+0

@Bernd嚴重嗎?...我懷疑減法可以很容易地進行優化,特別是在C中,對於兩個ints而言'n-1 Artefacto 2010-08-03 01:21:26

+0

Yikes!我沒有想到溢出。然後再說兩件事:OP是關於PHP的,而C中的溢出行爲是未定義的。因此,一個(C)編譯器可以合理地將'n-1 2010-08-10 16:20:17

3

在你而在第二個您要執行只有一個(比較)執行兩個操作(減法然後比較)的第一個實例。我認爲可以肯定地說第二個更高性能。無論如何,第一種形式非常不規範,我不知道爲什麼它會被用來替代第二種形式。

4

它不應該是顯著速度增益,但後來似乎更可讀我。第一個也有一個額外的減法部分。

+0

爲什麼要投票呢? – Sarfraz 2010-08-02 19:02:05

1

由於您使用的是高級腳本語言,因此執行該操作不是處理器操作的問題。更多的時間將花在解析代碼,驗證變量類型和管理變量內存等許多事情上。

即使沒有實際的區別,我猜第二個會更快,因爲語言表達更簡單。

術語$ N-1是在更復雜的理解< =一個部分。數學運算符只有幾個選項(>,<,< =,==,> =,!=,...),但術語$ n-1需要更復雜的分析,因爲它必須由減去在第一符號,然後進行分析兩個部分(其也可以是一個函數調用,一個常量,變量,另一個複雜的表達,...)

3

都不是。 PHP沒有強制實施,表示它是字節碼,直接從AST中解釋,或編譯成機器碼。實際上,有十億種不同的實現,主要的實現可能會隨着語言和API的其他部分一直髮生變化。

即使在x86的程序集級別,這兩種操作也沒有區別。證明:

X <ý

cmp eax, y 
jb its_true 

X < = Y

cmp eax, y 
jbe its_true 

JBE是同義詞類似JC IIRC,其中只檢查一個單一的標誌。這兩個條件分支只是檢查一個標誌是否設置。

這些操作可能會影響速度的唯一真正方法是您可以重載小於/大於運算符和相等性,即使如此,速度差異也應該可以忽略不計。

相關問題