2010-02-07 65 views
2

一個在循環中,這是否重要?

while(x < 100) { 
if(x == 1) { echo "Hello World!" } else { echo "Bottles" } 
x++; 
} 

while(x < 100) { 
if(x != 1) { echo "Bottles" } else { echo "Hello World!"} 
x++; 
} 

難道真的有這麼大的循環時,有所作爲?

+0

我看不出有什麼區別,每個都會有100個循環和1個條件檢查! – Kubi 2010-02-07 06:30:00

+0

我假設這是一個簡化的例子,因爲很清楚,如果這是真實的代碼,你應該將if移到循環之外。回聲「你好世界」,然後99瓶。 – 2010-02-07 06:41:05

回答

2

它可能不會有所作爲。

我會去的第二個,因爲它往往是x != 1比這將是x == 1

這可能轉化爲超微型-1千分之一對的一毫秒的性能提升,但微觀優化並不重要。

+4

爲了便於閱讀,我實際上會選擇第一個。如果你有很多這樣的情況,使用負面條件可能會引起混淆。 – 2010-02-07 06:31:29

2

你不可能注意到任何區別,幾乎肯定會有更大的瓶頸擔心。

1

對於典型的CPU,B可能會更快,因爲分支預測可能會混淆爲A.假設編譯器當然沒有優化。

順便說一句,你測量它,發現一個比另一個要好得多嗎?

+0

除了這是PHP的CPU分支預測不是一個因素。 – 2010-02-07 06:39:35

+0

這只是理論上的。除非我們測量它,否則永遠不可能知道哪個更快,甚至我們仍然無法確定。而且,很難預測分支預測器會做什麼,無論如何:-) – 2010-02-07 06:43:45

0

我假設x從1開始。如果不是這種情況,這不一定是可能的。

echo "Hello, World!"; 
while(x < 99) { echo "bottles"; x++; } 

爲什麼要打擾條件,你知道你將不得不這樣做嗎?

+0

您的代碼斷言x在開始處爲1。這個怎麼樣? while(x <1){echo「bottles」; X ++;如果(x ++ == 1)回顯「Hello,World!」;} if(x ++ == 1) (x <100){回聲「瓶子」; X ++; } – 2010-02-07 06:41:01

0

這取決於你的優化器如何處理你的循環。