A shorter compatibility version, works from PH5.3+:
<?php
if( ! function_exists('fdiv')){
function fdiv( $a, $b ){
if( $b ) return $a / $b; if( ! $a || is_nan( $a )) return NAN; return atan2( $b / $a, -1.0 ) > 0 ? INF : -INF; }
}
?>
A small test, should print nothing:
<?php
function fdiv2( $a, $b ){
if( $b ) return $a / $b;
if( ! $a || is_nan( $a )) return NAN;
return atan2( $b / $a, -1.0 ) > 0 ? INF : -INF;
}
$vals = array( +1.0, -1.0, +0.0, -1*0.0, +INF, -INF, 1E308, -1E308, 1E-323, -1E-323, NAN );
function float2bin( $f ){ return is_nan( $f ) ? 'NAN' : pack('d', $f ); }
foreach( $vals as $a ) foreach( $vals as $b ){
$r1 = fdiv( $a, $b );
$r2 = fdiv2( $a, $b );
if( float2bin( $r1 ) !== float2bin( $r2 )) print_r('', $a, $b, $r1, $r2 );
}
?>