CS では、HP 35 電卓をエミュレートする必要があったため、e^x の合計を調べました [この場合、'^' は「べき乗」を意味します]。式はsum n=0 to infinity ( (x^n) / (n!) )
私の実装では、最初の for ループは合計ループ:であり、2 番目の for ループは、double をオーバーフローしないよう1 + x + x^2 /2! + x^3 /3! + ...
に項を個別に乗算するために使用されます。x
... + (x/3) * (x/2) * (x/1) + ...
時間の複雑さに関しては、最初の for ループは必要な精度を確保するためにのみ必要ですが、2 番目の 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;
}
}