首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java-71-数值的整数次方.兑现函数double Power(double base, int exponent),求base的exponent次方

2012-08-22 
java-71-数值的整数次方.实现函数double Power(double base, int exponent),求base的exponent次方public c

java-71-数值的整数次方.实现函数double Power(double base, int exponent),求base的exponent次方

public class Power {/** *Q71-数值的整数次方 *实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。 */private static boolean InvalidInput=false;public static void main(String[] args) {double result=power(3,15);System.out.println(result);}public static double power(double base,int exponent){if(base==0.0){if(exponent==0){InvalidInput=true;}return 0.0;}double result=1;int unsignedExponent =exponent;if(exponent<0){unsignedExponent=-exponent;}result=powerWithUnsignedExponent(base,unsignedExponent);if(exponent<0){result=1/result;}return result;}/* * in Java,integer is 32 bits * we store  * base^(2^0),base^(2^1),base^(2^2),...base^(2^31) or * base^1,    base^2,    base^4,...    base^(2^31)  * in  * a[0],a[1],a[2],...a[31] * obviously,a[i+1]=a[i]*a[i] (0<=i<=30) * we calculate like this: *  3^7=(3^1)*(3^2)*(3^4)=a[0]*a[1]*a[2] */public static double powerWithUnsignedExponent(double base,int exponent){double result=1.0;int len=Integer.SIZE;//Integer.SIZE=32double[] a=new double[len];int count=numberOf1(exponent);double curPower=0.0;for(int i=0,j=0;i<len&&j<count;i++){if(i==0){curPower=base;}else{curPower=curPower*curPower;}if((exponent&(1<<i))!=0){//if exponent has '1' at i-th bita[i]=curPower;count++;}}for(int i=0;i<len;i++){if(a[i]!=0){result*=a[i];}}return result;}/* * a^n=a^(n/2)*a^(n/2)(when a is even number) * a^n=a^(n/2)*a^(n/2)*a (when a is odd number) */public static double powerWithUnsignedExponent2(double base,int exponent){double result=1.0;if(exponent==0){return 1;}if(exponent==1){return base;}result=powerWithUnsignedExponent2(base,exponent/2)*powerWithUnsignedExponent2(base,exponent/2);if((exponent&(0x01))!=0){result*=base;}return result;}/* * return how many '1' in x (binary) * e.g. (15)D=(1111)B,then we get 4 */public static int numberOf1(int x){int count=0;while(x!=0){x&=x-1;count++;}return count;}}

热点排行