- var_dump: documentation ( source)
- microtime: documentation ( source)
- pack: documentation ( source)
- sqrt: documentation ( source)
- unpack: documentation ( source)
<?php
function inverse_sqrt( $x)
{
return 1 / sqrt($x);
}
function fast_inverse_sqrt( $x)
{
$i = 0x5f3759df - (unpack('l', pack('f', $x))[1] >> 1);
$y = unpack('f', pack('l', $i))[1];
return $y * (1.5 - 0.5 * $x * $y * $y);
}
$t = microtime(true);
for($i = 0.1; $i <= 100; $i = $i + 0.04) {
$x = inverse_sqrt($i);
}
$inverse_sqrt_time = microtime(true) - $t;
$t = microtime(true);
for($i = 0.1; $i <= 100; $i = $i + 0.04) {
$x = fast_inverse_sqrt($i);
}
$fast_inverse_sqrt_time = microtime(true) - $t;
var_dump($inverse_sqrt_time, $fast_inverse_sqrt_time);
if ($inverse_sqrt_time < $fast_inverse_sqrt_time) {
echo "inverse_sqrt is faster";
} else {
echo "fast_inverse_sqrt is faster";
}