2011-08-24 61 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()