朴素乘方法和分治法:
#include <iostream>
#include <boost/timer/timer.hpp>
#include <limits>
using namespace boost::timer;
using namespace std;
double powers(double a,int n)// naive solution
{
if(a==1){
return 1;
}else if(a!=0){
if(n==0){
return 1;
}else{
double b=1;
for(int i=1;i<=n;++i){
b=b*a;
}
return b;
}
}else{
if(n==0){
return numeric_limits<double>::min();
}else{
return 0;
}
}
}
double recursive_powers(double a ,int n)// recursive solution
{
if(a==1){//讨论底和指数的几种基本情况
return 1;
}else if(a!=0){
if(n==0){
return 1;
}else{
double b=0;
if(n%2==0){
b= recursive_powers(a,n/2);
b*=b;
}else{
b=recursive_powers(a,n/2);
b=a*b*b;
}
return b;
}
}else{
if(n==0)
return numeric_limits<double>::min();
else
return 0;
}
}
int main()
{
cpu_timer t1;
t1.start();
//for(int i=0;i<2000;++i)
//{
// powers(1.1,i);
// //cout<<powers(1.1,i)<<endl;
//}
cout<<powers(1.000001,10)<<endl;
t1.stop();
cout<<t1.format();
cpu_timer t2;
t2.start();
//for(int i=0;i<2000;++i)
//{
// recursive_powers(1.1,i);
// //cout<<recursive_powers(1.1,i)<<endl;
//}
cout<<recursive_powers(1.000001,10)<<endl;
t2.stop();
cout<<t2.format();
}