-3

使用する数学クラスをインポートしないようにしていますが、定数「e」を推定しようとしています。e = 1+(1/1!)+(1/2!)+(1/3!)+(1/4!)+(1/5!)+....。

これらは私が一番上に持っているものです

String userInput;
int uIp; // this converts the string into int type 
double e = 2;

それから私はいくつかの質問をしますそして私は終了するためにゼロではなくそして続けるために負でないことを確認するためにチェックします

While(uIp >0){
  final int endTheLoop = 15;
  int factorialNumber = 1;
  double e2TheUserInput=0;

  for(int i = 2; i < endTheLoop; i++){
    for(int j = 1; j < i; j++){  
      factorialNumber = ((i - 1) * factorialNumber);
    }
    e = (1/factorialNumber) + e;
    e2TheUserInput = Math.pow(e,uIp);
  }
}
4

2 に答える 2

1

あなたは整数除算をしています(しかしeは二重の権利ですか?):

e = (1/factorialNumber) + e;

これを次のように修正します。

e = (1.0/(double)factorialNumber) + e;

すべてのループをカウントしていましたが、整数の除算によると変化はゼロです。:)

e = 2+(0)+(0)+(0)+(0)+....。

于 2012-09-10T15:19:42.163 に答える
0

あなたのコードが何をしようとしているのかはわかりませんが、exp(x) を計算したい場合は、これが私のやり方です。

public static void main(String... args) {
    for (int i = -4; i <= 4; i++)
        System.out.println(i + ": " + exp(i) + " cf " + Math.exp(i));
}

private static double exp(double d) {
    if (d < 0)
        return 1 / exp(-d);
    double e = 1, term = 1;
    for (int i = 1; i < 20 || term > e * 1e-16; i++) {
        term *= d / i;
        e += term;
    }
    return e;
}

指数が大きい場合は、テイラー級数を使用せずに積分べき乗を評価する方が効率的です。

public static final double E = 2.7182818284590452354;

private static double exp(double d) {
    if (d < 0)
        return 1 / exp(-d);
    long num = (long) d;
    double numE = 1;
    double mult = E;
    while (num > 0) {
        if ((num & 1) != 0)
            numE *= mult;
        num >>>= 1;
        mult *= mult;
    }
    double fract = d - (long) d;
    double fractE = 1, term = 1;
    for (int i = 1; i < 20; i++) {
        term *= fract / i;
        fractE += term;
    }
    return numE * fractE;
}
于 2012-09-10T15:43:35.893 に答える