如何在j2me中获得精确的Math.exp()?

时间:2016-02-01 13:38:24

标签: java math java-me

我正在使用j2me,我需要得到非常精确的exp(),最多值为4。 j2me的问题在于它的数学库没有pow()和exp()方法。为了解决这个问题,我只是使用这种方法来实现pow():

public static double pow(double num1, double num2) {
  double result = 1;
  for (int i = 0; i < num2; i++)
    result *= num1;
  return result;
}

这使我能够通过将e设置为常量(2.718281828459045)并调用pow来实现exp功能:

double calculation =  (20.386 - (5132.000 / (t + 273.15)));
System.out.println("calc: " + pow(2.71,calculation));
calculation = pow(2.7182818284590452,calculation) * 1.33;

我的问题是结果非常不准确,例如,如果我将math.exp和我的pow方法比作3,75,结果是这样的:

Pow函数返回:54.5980031309658

数学函数返回:42.52108200006278

所以我需要建议,如何在j2me环境中以尽可能高的精度实现exp功能。

1 个答案:

答案 0 :(得分:1)

我在这个问题中用bharath的答案帮助了我自己:How to get the power of a number in J2ME

由于exp方法只是pow,我们使用Euler的数字作为第一个参数,我使用了bharath方法:

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;
    }

方法调用:

calculation = powSqrt(2.7182818284590452,calculation) * 1.33;

结果几乎与Math.pow()方法一样好。

PS: 我不知道这是否是重复的帖子,如果是,你可以删除它。