すみません。最後にひとつ。

pow(x,y)のyがdoubleの時はlog介してるため、powは遅くなりますが、
yがintの時ってどうなるんでしょうか?

double ipower(double x, int n)
{
int abs_n; double k = 1.0;
abs_n = abs(n);

while(abs_n != 0){
if (abs_n & 1){
k *= x;
}
x *=x;abs_n >>=1:
}
if (n>=0) return k;
else return 1/k;
}

って、感じだと思うんですが…やはり、直接やるよりはどっちにしても遅いですかね?