To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm > -----Original Message----- > From: Jason Wong > Sent: 27/12/04 10:16 > > On Monday 27 December 2004 12:40, Richard Lynch wrote: > > > If you want to mimic the behaviour of abs (allowing for positive > numbers) > > and performance was an issue, that: > > $x = ($x < 0) ? - $x : $x; > > > > is most likely faster than abs() > > Having nothing better to do I decided to benchmark this: > > ternary: > > $doo = -20; > for ($i = 1; $i < 10000000; $i++) { > $dah = ($doo < 0) ? - $doo : $doo; > } > > abs(): > > $doo = -20; > for ($i = 1; $i < 10000000; $i++) { > $dah = abs($doo); > } That's not a valid benchmark, since only on the first pass through the loop is $doo negative. Personally, I'd want to test it with equal numbers of positive and negative values, and I'd want to know the contribution of the loop and value-setup overhead, so I'd write it like this: $t = microtime(); $oh = $t[1] + $t[0]; for ($i=1; $i<10000000; $i++) { $doo = 20 * ($i%2?-1:1); } $t = microtime(); $oh = $t[1] + $t[0] -$oh; $t = microtime(); $tern = $t[1] + $t[0]; for ($i=1; $i<10000000; $i++) { $doo = 20 * ($i%2?-1:1); $dah = ($doo<0) ? -$doo : $doo; } $t = microtime(); $tern = $t[1] + $t[0] -$tern; $t = microtime(); $abs = $t[1] + $t[0]; for ($i=1; $i<10000000; $i++) { $doo = 20 * ($i%2?-1:1); $dah = abs($doo); } $t = microtime(); $tern = $t[1] + $t[0] - $abs; echo "<p>Overhead = ", number_format($oh, 2), "sec<br />\n"; echo "Ternary = ", number_format($tern, 2), " sec; less overhead = ", number_format($tern-$oh, 2), " sec<br />\n"; echo "Abs() = ", number_format($abs, 2), " sec; less overhead = ", number_format($abs-$oh, 2), " sec\n</p>"; I don't have access to a php system right now, or I'd run it (just out of curiosity!). Anyone who wants to grab the above and test it is welcome... ;) Cheers! Mike -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php