问题
Possible Duplicate:
J2ME power(double, double) math function implementation
I'm developing a simple j2me application. There I need to get the power of a number as like as in the pow(double num1, double num2)
in java.
But as I got to know, j2me doesn't support to this pow() method.
Any helpful option is appreciated.
回答1:
public double pow(double num1, double num2) {
double result = 1;
for (int i = 0; i < num2; i++)
result *= num1;
return result;
}
回答2:
When developing applications for mobile devices using Java, you may require mathematical methods not available on your particular Java VM. You can use this code. It will helps you.
public double pow(double x, double y)
{
return powTaylor(x,y);
}
public double powSqrt(double x, double y)
{
int den = 1024, num = (int)(y*den), iterations = 10;
double n = Double.MAX_VALUE;
while( n >= Double.MAX_VALUE && iterations > 1)
{
n = x;
for( int i=1; i < num; i++ )n*=x;
if( n >= Double.MAX_VALUE )
{
iterations--;
den = (int)(den / 2);
num = (int)(y*den);
}
}
for( int i = 0; i <iterations; i++ )n = Math.sqrt(n);
return n;
}
public double powDecay(double x, double y)
{
int num, den = 1001, s = 0;
double n = x, z = Double.MAX_VALUE;
for( int i = 1; i < s; i++)n *= x;
while( z >= Double.MAX_VALUE )
{
den -=1;
num = (int)(y*den);
s = (num/den)+1;
z = x;
for( int i = 1; i < num; i++ )z *= x;
}
while( n > 0 )
{
double a = n;
for( int i = 1; i < den; i++ )a *= n;
if( (a-z) < .00001 || (z-a) > .00001 ) return n;
n *= .9999;
}
return -1.0;
}
double powTaylor(double a, double b)
{
boolean gt1 = (Math.sqrt((a-1)*(a-1)) <= 1)? false:true;
int oc = -1,iter = 30;
double p = a, x, x2, sumX, sumY;
if( (b-Math.floor(b)) == 0 )
{
for( int i = 1; i < b; i++ )p *= a;
return p;
}
x = (gt1)?(a /(a-1)):(a-1);
sumX = (gt1)?(1/x):x;
for( int i = 2; i < iter; i++ )
{
p = x;
for( int j = 1; j < i; j++)p *= x;
double xTemp = (gt1)?(1/(i*p)):(p/i);
sumX = (gt1)?(sumX+xTemp):(sumX+(xTemp*oc));
oc *= -1;
}
x2 = b * sumX;
sumY = 1+x2;
for( int i = 2; i <= iter; i++ )
{
p = x2;
for( int j = 1; j < i; j++)p *= x2;
int yTemp = 2;
for( int j = i; j > 2; j-- )yTemp *= j;
sumY += p/yTemp;
}
return sumY;
}
回答3:
public static double pow(final double a, final double b)
{
final int x = (int) (Double.doubleToLongBits(a) >> 32);
final int y = (int) (b * (x - 1072632447) + 1072632447);
return Double.longBitsToDouble(((long) y) << 32);
}
you can also find information about it
Creating a Java ME Math.pow() Method
来源:https://stackoverflow.com/questions/6516103/how-to-get-the-power-of-a-number-in-j2me