use Inline C => 'DATA'; use Benchmark 'cmpthese'; sub vdiag { my( $x, $y ) = @_; my $x_sq = $x * $x; my $y_sq = $y * $y; my $prod = $x_sq * $y_sq; my $res = sqrt($prod); return $res; } sub ediag { return sqrt( $_[0] * $_[0] * $_[1] * $_[1] ); } cmpthese( -5, { cdiag => 'cdiag(7,9)', vdiag => 'vdiag(7,9)', ediag => 'ediag(7,9)', } ); __DATA__ __C__ #include double cdiag ( double x, double y ) { double x_sq = x * x; double y_sq = y * y; double prod = x_sq * y_sq; return sqrt(prod); } #### $ ./mytest.pl Rate vdiag ediag cdiag vdiag 1589859/s -- -49% -82% ediag 3127854/s 97% -- -64% cdiag 8603134/s 441% 175% --