【发布时间】: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 功能。
【问题讨论】:
-
您的函数名称对于不是分数的指数毫无意义。您对这不正确感到惊讶吗?
-
@agold 重复的答案非常糟糕且不完整
-
@Ferrybig:是的,你是对的,但accepted answer(仅链接答案)有一个很好的link,它提供了实现
pow函数的算法。 -
查看相关的Q/A:How Math.Pow (and so on) actualy works、Power by squaring for negative exponents 和 fixed point exp2,log2,pow。特别是前两个将导致解决方案......最后一个只是我的一个 bignum 类的实现,不阅读前两个链接将无济于事