我一直在想,檢查數字是1還是更大時,最佳做法是什麼。
IF($foo > 0)
OR
IF($foo >= 1)
哪一個我應該使用?他們似乎都是一樣的。
我一直在想,檢查數字是1還是更大時,最佳做法是什麼。
IF($foo > 0)
OR
IF($foo >= 1)
哪一個我應該使用?他們似乎都是一樣的。
當涉及到性能,你想用>=
而不是>
。
我在僞基準:
for 100000x {
time result of 5 > 0
}
for 100000x {
time result of 5 >= 1
}
編輯:和威廉的意見建議時間整個for循環,這到底發生了什麼。我把所有的時間加在一起,這給了我一次同時完成整個for循環的完全相同的結果。所以基本上我也是這樣做的。 (FYI我爲基準威廉他的建議,它有相同的結果,相信我,我是工程師。)
我的結果:
> >=
x100000 | 198.63224029541 | 191.68829917908
In MS
所以,當談到速度並且使用的是整數(請參閱上面的偉大答案!),>=
會更快。但是,考慮後果!在100.000
測試中只有7ms
。但是,當你有幾百萬的記錄,以檢查...
編輯
運行基準測試一對夫婦多次後,我得到更大的差異。差異像10
,15
甚至20
毫秒!沒有什麼改變,顯然我的處理器很忙,但很高興與大家分享。
,我希望你沒有完全按照你的僞碼建議,因爲它不會是一個準確的測試。對每一次比較進行計時比實際比較花費更多時間,並且不準確。你最好做10萬次運行,然後把它作爲一個整體對100k> =運行進行計時。 –
@WilliamLawnStewart Yup,這正是我所做的。我會改變它,我認爲這是有道理的。但可能它沒有.. – Jelmer
的最終正確的是:
if ($foo >= 1) { }
很清楚,簡潔,適合你在它扔任何號碼類型(所有兩個)。
以下是整數的一些替代比較;順便說一句,他們沒有產生更好的表現(事實)或可讀性(在我看來)。
if ($foo) {
// anything that's not zero, regardless of sign
}
if ($foo != 0) {
// same as above, but forces the left operand to be casted to number
}
if ($foo > 0) {
// anything that's above zero and therefore greater or equal to one
}
如果你的要求是檢查值大於或等於1,然後竟然沒有在這裏做了一個決定。從邏輯和語義上講,只有的選擇是x >= 1
。
-1 0 0.5 1
IF($foo > 0) false false true true
IF($foo >= 1) false false false true
IF($foo) true false true true
這取決於您是使用整數還是浮點數。
基於性能優勢選擇一點是沒有意義的。
看到Jelmer的說法後,我寫了一個基準來測試一下,看看是否有意義的區別。
這裏是我跑的基準確切的代碼:
<?php
echo '>= VS ><br/>';
for($j = 0; $j < 100; $j++)
{
$start = microtime(true);
for($i = 1000000; $i > 0; $i--)
{
}
$midpoint = microtime(true);
for($i = 1000000; $i >= 1; $i--)
{
}
$end = microtime(true);
$with_equals = $end - $midpoint;
$no_equals = $midpoint - $start;
echo $with_equals.' VS '.$no_equals.'<br/>';
if($with_equals < $no_equals)
{
$with_equals_wins++;
}
elseif($with_equals > $no_equals)
{
$no_equals_wins++;
}
}
echo '<br/>TOTAL WINS<br/>>= - '.$with_equals_wins.' VS > - '.$no_equals_wins;
在運行Windows 7 x64和XAMPP 1.7.3我的英特爾酷睿i7 Sandy Bridge的筆記本電腦,我然後跑基準幾次,得到了以下結果:(我確信關閉睿頻加速,使CPU的時鐘都是穩定的)
TOTAL WINS
>= - 26 VS > - 74
TOTAL WINS
>= - 21 VS > - 79
TOTAL WINS
>= - 22 VS > - 78
請注意,我的結果是什麼Jelmer得到了相反的。
如果存在任何一種甚至稍有意義的性能差異,那麼它可能取決於代碼運行的特定硬件和軟件環境。
只有當$ foo是整數時它才起作用。 – ivankoni
'0.001> 0'對'0.001> = 1' – Esailija
@Esailija沒有想到這種情況,猜測失敗了我的整個問題。但是,如果我們只處理整個數字 –