2011-08-24 101 views
1

我有一個素數計算。現在我想知道PHP計算需要多長時間。在計算之前和之後,我已經採取了兩次microtimes,並將其減掉。但結果與我的觀察不符。我必須等待兩秒鐘才能得到結果,但計算結果表示0,004毫秒。爲什麼如此以及如何獲得真正的持續時間?如何計算以PHP計算的持續時間

$prim_arr = array(); 
$start = time(); 

for ($i = 1; $i <= 20000; $i++) { 
    $result = NULL; 
    for ($x = 2; $x < $i; $x++) { 
    if(!($i % $x)){ 
     $result = $i; 
     break; 
    } 
    } 
    if (!$result) $prim_arr[] = $i;    
} 

$end = time(); 
echo (($end - $start)/1000)." ms"; 

print_r($prim_arr); 
+0

其他人已經回答了關於time()/ microtime()的問題。你找到素數的方法很幼稚。你只需要在內部循環迭代到int($ i/2)。 Eratosthenes的篩子將更快 - 請參閱http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes。有更好的算法來尋找素數(主要假設你不需要一個完整的集合) – symcbean

+0

你可以使用[microtime](http://php.net/manual/en/function.microtime.php) – xdazz

回答

0

如果您需要ms的時間,您不應該除以1000,而是乘以。

time()函數以秒爲單位返回值。

6

您正在計算整秒,因爲time()返回自UNIX時代以來的秒數。你也不能用1000除以得到毫秒,你必須乘以。使用microtime()代替:

$start = microtime(true); 

... 

$end = microtime(true); 
echo ($end - $start).' seconds'; 
// Or in milliseconds: 
echo (($end - $start) * 1000).' ms'; 

在你的例子發生了什麼事是你在幾秒鐘內得到了兩次,例如。 13141736571314173661。差別是4秒。然後你將它除以1000得到0,004「毫秒」,這顯然是錯誤的。乘以1000會得到正確的4000ms結果,但精度較差。這就是microtime派上用場的地方。

+0

對不起,正如我寫的,我採取了microtime。但我的例子是我剛剛複製的一個測試。我認爲microtime()可以讓微秒回來......但是現在我在php.net上讀到的這些只有幾秒微秒。那是我的錯誤。謝謝。 – ESCOBAR

+0

是的,'microtime()'可能會令人困惑,因爲人們可能會期望微秒。在這種情況下,你的計算是有效的。 –

1

time()給你幾秒鐘。爲什麼你最後把它分成1000個。

如果你想計算毫秒,你應該乘以1000或使用microtime()