2004-09-24 00:42:21 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
function simple() {
|
|
|
|
for ($i = 0; $i < 1000000; $i++)
|
|
|
|
$a++;
|
|
|
|
|
|
|
|
for ($thisisalongname = 0; $thisisalongname < 1000000; $thisisalongname++)
|
|
|
|
$thisisanotherlongname++;
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function simplecall() {
|
|
|
|
for ($i = 0; $i < 1000000; $i++)
|
|
|
|
strlen("hallo");
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function hallo($a) {
|
|
|
|
}
|
|
|
|
|
|
|
|
function simpleucall() {
|
|
|
|
for ($i = 0; $i < 1000000; $i++)
|
|
|
|
hallo("hallo");
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function simpleudcall() {
|
|
|
|
for ($i = 0; $i < 1000000; $i++)
|
|
|
|
hallo2("hallo");
|
|
|
|
}
|
|
|
|
|
|
|
|
function hallo2($a) {
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function mandel() {
|
|
|
|
$w1=50;
|
|
|
|
$h1=150;
|
|
|
|
$recen=-.45;
|
|
|
|
$imcen=0.0;
|
|
|
|
$r=0.7;
|
|
|
|
$s=0; $rec=0; $imc=0; $re=0; $im=0; $re2=0; $im2=0;
|
|
|
|
$x=0; $y=0; $w2=0; $h2=0; $color=0;
|
|
|
|
$s=2*$r/$w1;
|
|
|
|
$w2=40;
|
|
|
|
$h2=12;
|
|
|
|
for ($y=0 ; $y<=$w1; $y=$y+1) {
|
|
|
|
$imc=$s*($y-$h2)+$imcen;
|
|
|
|
for ($x=0 ; $x<=$h1; $x=$x+1) {
|
|
|
|
$rec=$s*($x-$w2)+$recen;
|
|
|
|
$re=$rec;
|
|
|
|
$im=$imc;
|
|
|
|
$color=1000;
|
|
|
|
$re2=$re*$re;
|
|
|
|
$im2=$im*$im;
|
|
|
|
while( ((($re2+$im2)<1000000) && $color>0)) {
|
|
|
|
$im=$re*$im*2+$imc;
|
|
|
|
$re=$re2-$im2+$rec;
|
|
|
|
$re2=$re*$re;
|
|
|
|
$im2=$im*$im;
|
|
|
|
$color=$color-1;
|
|
|
|
}
|
|
|
|
if ( $color==0 ) {
|
|
|
|
print "_";
|
|
|
|
} else {
|
|
|
|
print "#";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
print "<br>".$vbCr;
|
|
|
|
flush();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function mandel2() {
|
|
|
|
$b = " .:,;!/>)|&IH%*#";
|
|
|
|
//float r, i, z, Z, t, c, C;
|
|
|
|
for ($y=30; printf("\n"), $C = $y*0.1 - 1.5, $y--;){
|
|
|
|
for ($x=0; $c = $x*0.04 - 2, $z=0, $Z=0, $x++ < 75;){
|
|
|
|
for ($r=$c, $i=$C, $k=0; $t = $z*$z - $Z*$Z + $r, $Z = 2*$z*$Z + $i, $z=$t, $k<5000; $k++)
|
|
|
|
if ($z*$z + $Z*$Z > 500000) break;
|
|
|
|
echo $b[$k%16];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function Ack($m, $n){
|
|
|
|
if($m == 0) return $n+1;
|
|
|
|
if($n == 0) return Ack($m-1, 1);
|
|
|
|
return Ack($m - 1, Ack($m, ($n - 1)));
|
|
|
|
}
|
|
|
|
|
|
|
|
function ackermann($n) {
|
|
|
|
$r = Ack(3,$n);
|
|
|
|
print "Ack(3,$n): $r\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function ary($n) {
|
|
|
|
for ($i=0; $i<$n; $i++) {
|
|
|
|
$X[$i] = $i;
|
|
|
|
}
|
|
|
|
for ($i=$n-1; $i>=0; $i--) {
|
|
|
|
$Y[$i] = $X[$i];
|
|
|
|
}
|
|
|
|
$last = $n-1;
|
|
|
|
print "$Y[$last]\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function ary2($n) {
|
|
|
|
for ($i=0; $i<$n;) {
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
$X[$i] = $i; ++$i;
|
|
|
|
}
|
|
|
|
for ($i=$n-1; $i>=0; $i--) {
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
$Y[$i] = $X[$i]; --$i;
|
|
|
|
}
|
|
|
|
$last = $n-1;
|
|
|
|
print "$Y[$last]\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function ary3($n) {
|
|
|
|
for ($i=0; $i<$n; $i++) {
|
|
|
|
$X[$i] = $i + 1;
|
|
|
|
}
|
|
|
|
for ($k=0; $k<1000; $k++) {
|
|
|
|
for ($i=$n-1; $i>=0; $i--) {
|
|
|
|
$Y[$i] += $X[$i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$last = $n-1;
|
|
|
|
print "$Y[0] $Y[$last]\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function fibo_r($n){
|
2005-06-16 23:11:03 +08:00
|
|
|
return(($n < 2) ? 1 : fibo_r($n - 2) + fibo_r($n - 1));
|
2004-09-24 00:42:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
function fibo($n) {
|
|
|
|
$r = fibo_r($n);
|
|
|
|
print "$r\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function hash($n) {
|
|
|
|
for ($i = 1; $i <= $n; $i++) {
|
|
|
|
$X[dechex($i)] = $i;
|
|
|
|
}
|
|
|
|
for ($i = $n; $i > 0; $i--) {
|
|
|
|
if ($X[$i]) { $c++; }
|
|
|
|
}
|
|
|
|
print "$c\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function hash2($n) {
|
|
|
|
for ($i = 0; $i < 10000; $i++) {
|
|
|
|
$hash1["foo_$i"] = $i;
|
|
|
|
}
|
|
|
|
for ($i = $n; $i > 0; $i--) {
|
|
|
|
foreach($hash1 as $key => $value) $hash2[$key] += $value;
|
|
|
|
}
|
|
|
|
print "$hash1[foo_1] $hash1[foo_9999] $hash2[foo_1] $hash2[foo_9999]\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function gen_random ($n) {
|
|
|
|
global $LAST;
|
|
|
|
return( ($n * ($LAST = ($LAST * IA + IC) % IM)) / IM );
|
|
|
|
}
|
|
|
|
|
|
|
|
function heapsort_r($n, &$ra) {
|
|
|
|
$l = ($n >> 1) + 1;
|
|
|
|
$ir = $n;
|
|
|
|
|
|
|
|
while (1) {
|
|
|
|
if ($l > 1) {
|
|
|
|
$rra = $ra[--$l];
|
|
|
|
} else {
|
|
|
|
$rra = $ra[$ir];
|
|
|
|
$ra[$ir] = $ra[1];
|
|
|
|
if (--$ir == 1) {
|
|
|
|
$ra[1] = $rra;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$i = $l;
|
|
|
|
$j = $l << 1;
|
|
|
|
while ($j <= $ir) {
|
|
|
|
if (($j < $ir) && ($ra[$j] < $ra[$j+1])) {
|
|
|
|
$j++;
|
|
|
|
}
|
|
|
|
if ($rra < $ra[$j]) {
|
|
|
|
$ra[$i] = $ra[$j];
|
|
|
|
$j += ($i = $j);
|
|
|
|
} else {
|
|
|
|
$j = $ir + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$ra[$i] = $rra;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function heapsort($N) {
|
|
|
|
global $LAST;
|
|
|
|
|
|
|
|
define("IM", 139968);
|
|
|
|
define("IA", 3877);
|
|
|
|
define("IC", 29573);
|
|
|
|
|
|
|
|
$LAST = 42;
|
|
|
|
for ($i=1; $i<=$N; $i++) {
|
|
|
|
$ary[$i] = gen_random(1);
|
|
|
|
}
|
|
|
|
heapsort_r($N, $ary);
|
|
|
|
printf("%.10f\n", $ary[$N]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function mkmatrix ($rows, $cols) {
|
|
|
|
$count = 1;
|
|
|
|
$mx = array();
|
|
|
|
for ($i=0; $i<$rows; $i++) {
|
|
|
|
for ($j=0; $j<$cols; $j++) {
|
|
|
|
$mx[$i][$j] = $count++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return($mx);
|
|
|
|
}
|
|
|
|
|
|
|
|
function mmult ($rows, $cols, $m1, $m2) {
|
|
|
|
$m3 = array();
|
|
|
|
for ($i=0; $i<$rows; $i++) {
|
|
|
|
for ($j=0; $j<$cols; $j++) {
|
|
|
|
$x = 0;
|
|
|
|
for ($k=0; $k<$cols; $k++) {
|
|
|
|
$x += $m1[$i][$k] * $m2[$k][$j];
|
|
|
|
}
|
|
|
|
$m3[$i][$j] = $x;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return($m3);
|
|
|
|
}
|
|
|
|
|
|
|
|
function matrix($n) {
|
|
|
|
$SIZE = 30;
|
|
|
|
$m1 = mkmatrix($SIZE, $SIZE);
|
|
|
|
$m2 = mkmatrix($SIZE, $SIZE);
|
|
|
|
while ($n--) {
|
|
|
|
$mm = mmult($SIZE, $SIZE, $m1, $m2);
|
|
|
|
}
|
|
|
|
print "{$mm[0][0]} {$mm[2][3]} {$mm[3][2]} {$mm[4][4]}\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function nestedloop($n) {
|
|
|
|
$x = 0;
|
|
|
|
for ($a=0; $a<$n; $a++)
|
|
|
|
for ($b=0; $b<$n; $b++)
|
|
|
|
for ($c=0; $c<$n; $c++)
|
|
|
|
for ($d=0; $d<$n; $d++)
|
|
|
|
for ($e=0; $e<$n; $e++)
|
|
|
|
for ($f=0; $f<$n; $f++)
|
|
|
|
$x++;
|
|
|
|
print "$x\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function sieve($n) {
|
|
|
|
$count = 0;
|
|
|
|
while ($n-- > 0) {
|
|
|
|
$count = 0;
|
|
|
|
$flags = range (0,8192);
|
|
|
|
for ($i=2; $i<8193; $i++) {
|
|
|
|
if ($flags[$i] > 0) {
|
|
|
|
for ($k=$i+$i; $k <= 8192; $k+=$i) {
|
|
|
|
$flags[$k] = 0;
|
|
|
|
}
|
|
|
|
$count++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
print "Count: $count\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/****/
|
|
|
|
|
|
|
|
function strcat($n) {
|
|
|
|
$str = "";
|
|
|
|
while ($n-- > 0) {
|
|
|
|
$str .= "hello\n";
|
|
|
|
}
|
|
|
|
$len = strlen($str);
|
|
|
|
print "$len\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
/*****/
|
|
|
|
|
|
|
|
function getmicrotime()
|
2005-06-15 07:59:29 +08:00
|
|
|
{
|
|
|
|
$t = gettimeofday();
|
|
|
|
return ($t['sec'] + $t['usec'] / 1000000);
|
|
|
|
}
|
2004-09-24 00:42:21 +08:00
|
|
|
|
|
|
|
function start_test()
|
|
|
|
{
|
|
|
|
ob_start();
|
|
|
|
return getmicrotime();
|
|
|
|
}
|
|
|
|
|
|
|
|
function end_test($start, $name)
|
|
|
|
{
|
|
|
|
global $total;
|
|
|
|
$end = getmicrotime();
|
|
|
|
ob_end_clean();
|
|
|
|
$total += $end-$start;
|
|
|
|
$num = number_format($end-$start,3);
|
|
|
|
$pad = str_repeat(" ", 24-strlen($name)-strlen($num));
|
|
|
|
|
|
|
|
echo $name.$pad.$num."\n";
|
|
|
|
ob_start();
|
|
|
|
return getmicrotime();
|
|
|
|
}
|
|
|
|
|
|
|
|
function total()
|
|
|
|
{
|
|
|
|
global $total;
|
|
|
|
$pad = str_repeat("-", 24);
|
|
|
|
echo $pad."\n";
|
|
|
|
$num = number_format($total,3);
|
|
|
|
$pad = str_repeat(" ", 24-strlen("Total")-strlen($num));
|
|
|
|
echo "Total".$pad.$num."\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
$t0 = $t = start_test();
|
|
|
|
simple();
|
|
|
|
$t = end_test($t, "simple");
|
|
|
|
simplecall();
|
|
|
|
$t = end_test($t, "simplecall");
|
|
|
|
simpleucall();
|
|
|
|
$t = end_test($t, "simpleucall");
|
|
|
|
simpleudcall();
|
|
|
|
$t = end_test($t, "simpleudcall");
|
|
|
|
mandel();
|
|
|
|
$t = end_test($t, "mandel");
|
|
|
|
mandel2();
|
|
|
|
$t = end_test($t, "mandel2");
|
|
|
|
ackermann(7);
|
|
|
|
$t = end_test($t, "ackermann(7)");
|
|
|
|
ary(50000);
|
|
|
|
$t = end_test($t, "ary(50000)");
|
|
|
|
ary2(50000);
|
|
|
|
$t = end_test($t, "ary2(50000)");
|
|
|
|
ary3(2000);
|
|
|
|
$t = end_test($t, "ary3(2000)");
|
|
|
|
fibo(30);
|
|
|
|
$t = end_test($t, "fibo(30)");
|
|
|
|
hash(50000);
|
|
|
|
$t = end_test($t, "hash(50000)");
|
|
|
|
hash2(50);
|
|
|
|
$t = end_test($t, "hash2(50)");
|
|
|
|
heapsort(20000);
|
|
|
|
$t = end_test($t, "heapsort(20000)");
|
|
|
|
matrix(20);
|
|
|
|
$t = end_test($t, "matrix(20)");
|
|
|
|
nestedloop(12);
|
|
|
|
$t = end_test($t, "nestedloop(12)");
|
|
|
|
sieve(30);
|
|
|
|
$t = end_test($t, "sieve(30)");
|
|
|
|
strcat(200000);
|
|
|
|
$t = end_test($t, "strcat(200000)");
|
|
|
|
total($t0, "Total");
|
|
|
|
?>
|