我正在使用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功能。
答案 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: 我不知道这是否是重复的帖子,如果是,你可以删除它。