When developing applications for mobile devices using Java, you may need mathematical methods that are not available on your specific Java virtual machine. You can use this code. This will help 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;
}
source
share