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

How to get precise Math.exp() in j2me?

我正在使用 j2me,我需要为最大 4 的值获得非常精确的 exp()。 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 函数returns:54.5980031309658

数学函数returns:42.52108200006278

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

我帮助自己回答了这个问题:How to get the power of a number in J2ME

由于 exp 方法只是 pow,我们使用欧拉数作为第一个参数,因此我使用了 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: 不知道是不是重复帖,如果是可以删除