在 CS 中,我们必须模拟 HP 35 计算器,所以我查找了 e^x 的总和 [在这种情况下,'^' 表示“幂”]。公式是sum n=0 to infinity ( (x^n) / (n!) )
在我的实现中,第一个 for 循环是求和循环:1 + x + x^2 /2! + x^3 /3! + ...
,第二个 for 循环用于单独乘出x
项,以免溢出双精度:... + (x/3) * (x/2) * (x/1) + ...
关于时间复杂度,第一个 for 循环仅用于确保必要的准确性,但第二个 for 循环用于将项相乘。这两个循环都不受 x 大小的直接影响,所以我不知道如何计算该算法的时间复杂度;我怀疑它是 n ln(n)。我如何计算/这个算法的时间复杂度是多少
public class TrancendentalFunctions {
private static final double ACCURACY = .000000000000001;
public static double exp(double x) {
// if larger than 709, throw overflow error
double result = 1; // result starts at one is important
for(int i=1; i < 2147483647; i++) {
double temp = 1; // temp starts at one is important
for(int n = i; n > 0; n--) {
temp *= x / n;
}
result += temp;
if (temp < ACCURACY) break; // accuracy of 14 digits
}
return result;
}
}