sub fp_equal { my ($x,$y,$precision) = @_; $precision ||= 0.000001; return 1 if (! defined($x) and ! defined($y) ); return 0 if (! defined($x) or ! defined($y) ); return 1 if ($x == $y); # for 0 == 0 ($x,$y) = ($y,$x) if (!$y); # for $y == 0 return ( abs ( 1 - $x/$y ) <= $precision ) ? 1 : 0; }