2012-08-03

SCIP in C++11 ― 1.2節 その4


問題1.13シルヴァーマンでやったのでパス。
問題1.14,1.15はプロセスの読み方なのでパス。


1.2.4 べき乗の計算(高速版)

なるほど、考えてみればこうすると早いな。



問題1.161.19はあまり興味を惹かないのでパス。
問題1.20Scheme特有の話なのでパス。
1.2.6節はシルヴァーマンでやったのでパス。




----
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 件のコメント :

コメントを投稿