How to get the power of a number in J2ME [duplicate]

只愿长相守 提交于 2019-12-20 03:42:37

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!