【问题标题】:How to get precise Math.exp() in j2me?如何在 j2me 中获得精确的 Math.exp()?
【发布时间】:2016-02-01 13:38:24
【问题描述】:

我正在使用 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 功能。

【问题讨论】:

标签: java math java-me


【解决方案1】:

我在这个问题上用 bharath 回答了我自己: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: 不知道是不是重复的帖子,如果是的话可以删除。

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多