問題1.14,1.15はプロセスの読み方なのでパス。
1.2.4 べき乗の計算(高速版)
なるほど、考えてみればこうすると早いな。
template<typename
ArgumentType>
const
ArgumentType square(const ArgumentType x)
{
return(x*x);
}
template<typename
ArgumentType>
const
ArgumentType powerFast
(const
ArgumentType base, const unsigned int exponent)
{
if(0U==exponent){
return(static_cast<ArgumentType>(1));
}else if(0U==exponent%2U){
return(square(powerFast(base,
exponent/2U)));
}
return(base*powerFast(base,exponent-1U));
}
int
main(int argc, char** argv)
{
const unsigned int orderMax(11);
const int base(2);
for(auto
order=0U;order<orderMax;++order){
cout<<base<<"^"<<order<<"="<<powerFast(base,order)<<endl;
}
return(0);
}
----
出力
----
2^0=1
2^1=2
2^2=4
2^3=8
2^4=16
2^5=32
2^6=64
2^7=128
2^8=256
2^9=512
2^10=1024
0 件のコメント :
コメントを投稿