如何在 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:
不知道是不是重复帖,如果是可以删除
我正在使用 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: 不知道是不是重复帖,如果是可以删除