1
public class Nitin12assignA6 {

    public static void main(String args[]) throws IOException {
        series ob = new series();
        ob.input();
        ob.findSum();
        ob.display();
    }
}
    class series {

        int x, n;

        double sum;

        series() {
            x = n = 0;
            sum = 0.0f;
        }

        void input() throws IOException {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("\nEnter the value of x = ");
            x = Integer.parseInt(in.readLine());
            System.out.print("Enter the value of n = ");
            n = Integer.parseInt(in.readLine());
        }

        void display() {
            System.out.println("The sum of Series upto " + n + " terms is: " + sum);
            System.out.println();
        }

        long fact(int num) {
            if(num == 1) {
                return 1;
            }
            return num * fact(num - 1);
        }

        int power(int num, int exp) {
            if(exp == 1) {
                return 1;
            }
            return num * power(num, exp - 1);
        }

        double term(int numr, long denom) {
            return(numr / denom);
        }

        void findSum() {
            int u = 2, l = 4;
            sum = 1.0f;
            for(int i = 0; i < n; i++) {
                if(l % 8 == 0) {
                    sum += term(power(x, u), fact(l));
                    // Test start
                    System.out.println("add" + sum + " power " + power(x, u) + " fact " + fact(l) + " x " + x + " u " + u
                            + " l " + l);
                    System.out.println("term " + term(power(x, u), fact(l)));
                    System.out.println("test term " + term(5, 2)); // printing 2.0
                                                                    // instead of 2.5
                    // Test end
                } else {
                    sum -= term(power(x, u), fact(l));
                    // Test start
                    System.out.println("minus" + sum + " power " + power(x, u) + " fact " + fact(l) + " x " + x + " u " + u
                            + " l " + l);
                    System.out.println("term " + term(power(x, u), fact(l)));
                    // Test end
                }
                u += 2;
                l += 4;
            }
        }
    }

//double term(int numr,long denom) //{return (numr/denom);} この関数は double 値を返しません。助けてください... このプログラムは、n 項までの一連の和を見つけます。例 - テスト用語は 2.5 ではなく 2.0 を返しています... ありがとうございます。

4

5 に答える 5

4

分割前に double に明示的にキャストする必要があります。

double term(int numr, long denom) {
     return ((double)numr / denom);
}
于 2012-12-14T10:42:38.820 に答える
1

へのキャストdoubleは、除算の結果の値に対して行われるため、読み取ることができます

double term(int numr,long denom) {
    return (double) (numr/denom);
}

Sonumr/denomが最初に評価され、int/longtype が long であるため、結果は 2L になります。次に、double にキャストされます。double として評価する場合は、次のようにします。

double term(int numr,long denom) {
    return  ((double)numr/denom);
}
于 2012-12-14T10:42:56.680 に答える
0

試す

double term(int numr, long denom) {
    return ((double) numr/denom);
}

あなたのバージョンint/longには、常に非浮動小数点数を返すものがありました。

これを参照してください:

int a = 2;
int b = 4;
double c = a/b; // 0.0
double d = ((double) a/b); // 0.5
于 2012-12-14T10:42:34.970 に答える
0
double term(int numr, long denom) {
    return (numr / denom);
}

戻り値は ですdoubleが、ディビジョン(numr / denom)は を作成し、longそれを double に変換します。

于 2012-12-14T10:43:06.583 に答える
0

これが役立つ場合があります。

double term(int numr, long denom) {
    return ((double)numr / denom);
}
于 2012-12-14T10:50:57.580 に答える