// 此方法能减少乘法次数, O(1)
#include <iostream>
#include <cassert>
using namespace std;
// do not consider doulbe overflow
double pow(double base, int exponent)
{
// initialize
int i = 0;
assert(base!=0 && exponent>=0);// if the condition is true, go ahead, else break;
if (exponent==0) return 1.0;
double power = 1.0;
unsigned int mask = 1;
double ret = 1.0;
for (i=0; i<32; ++i)
{
if (i==0) power = base;
else power = power*power;
if ( ((mask<<i) & (unsigned int)exponent) != 0)
{
ret = ret * power;
}
}
return ret;
}
int main(int argc, char* argv[])
{
cout<<pow(2.5,2)<<endl;
cout<<pow(-2.5,2)<<endl;
cout<<pow(1,0)<<endl;
cout<<pow(100,3)<<endl;
cout<<pow(-100,4)<<endl;
return 0;
}
double型数据的整数次方
最新推荐文章于 2021-03-04 16:10:14 发布