Perlで累乗計算の速度計測〜二乗を計算するなら?〜

Perlで二乗の計算をするなら

$i ** 2

よりも

$i * $i

の方が約2倍早い。

実験

0〜1000000までの二乗を計算する速度

ソース

pow1.pl(*で計算)

#!/usr/bin/perl

use strict;

for (my $i = 0; $i < 1000000; $i++) {
	my $p = $i * $i;
}

pow2.pl(**で計算)

#!/usr/bin/perl

use strict;

for (my $i = 0; $i < 1000000; $i++) {
	my $p = $i ** 2;
}
結果

実行環境はWindowsXP SP2 + Cygwinなので、少し遅いです。

$ time ./pow1.pl;time ./pow2.pl 

real    0m0.394s
user    0m0.374s
sys     0m0.046s

real    0m0.641s
user    0m0.640s
sys     0m0.030s

掛算を使用する方が約2倍速いことがわかる。

ちなみに三乗は?

$ time ./pow1.pl;time ./pow2.pl 

real    0m4.187s
user    0m0.468s
sys     0m0.031s

real    0m1.183s
user    0m1.046s
sys     0m0.015s

となり、累乗の演算子を使用した方が明らかに早いことが分かる。