式の計算式に従ってcosxの概算値を計算します〜【階乗計算時のオーバーフロー】

【問題の説明】

既知のcosxのおおよその計算式は次のとおりです。

cosx = 1-x2 / 2!+ x4 / 4!--x6 / 6!+…+(-1)nx2n /(2n)!

ここで、xはラジアン、nは0以上の整数です。上記の近似計算式を使用して、ユーザーが入力したxとnの値に応じてcosxの近似値を計算するプログラムを作成し、出力結果の小数点以下8桁を要求します。

【入力フォーム】

コンソールから10進数のx(0 <= x <= 10)と整数のn(0 <= n <= 1000)を、2つの数値の間のスペースで区切って入力します。

【出力フォーム】

コンソール出力式の結果:小数点以下8桁。

【サンプル入力1】

1.0472 3

【サンプル出力1】

0.49996244

【サンプル入力2】

1.0472 49

【サンプル出力2】

0.49999788

[サンプル概要]

xを1.0472、nを3と入力すると、cosxの近似式の値は0.49996244で、小数点以下8桁になります。同様に、xが1.0472、nが49の場合、cosxの近似式の値は0.49999788です。 、小数点以下。8ビットは予約されています。

注:データの正確性と一貫性を確保するために、doubleデータ型を使用して計算結果を保存してください。

【採点】

この質問には、上記の式の計算結果、合計5つのテストポイント、各テストポイント5ポイント、合計25ポイントの出力が必要です。


最初の間違った書き込み:

package pkg3;

import java.util.Scanner;

public class Demo03 {
    
    
	public static void main(String[] args) {
    
    
		double x=0.0,sum=1.0;
		int n;
		Scanner sc1 = new Scanner(System.in);
		x = sc1.nextDouble();
		n = sc1.nextInt();
		sc1.close();
		int sign;
		double temp;
		long down;
		for (int i = 1; i <= n; i++) {
    
    
			sign = i%2==1?-1:1;
			temp = Math.pow(x, 2*i);
			down = 1;
			for (int j = 1; j <= 2*i; j++) {
    
    
				down *= j;
			}
			System.out.println(sign+" "+down);
			sum += sign*temp/(double)down;
		}
		System.out.println(String.format("%.8f", sum));
	}
}

だから、ギャングの問題解決によって書かれたブログへのインターネットこれは、
制御階乗(2n!)で問題を見つけたリンクです。最大20を節約するために!最大16を節約するためにInt !、だからダイレクトライン階乗どこにもありません

その後、改善されました:

package pkg3;

import java.util.Scanner;

public class Demo03 {
    
    
	public static void main(String[] args) {
    
    
		double x=0.0,sum=1.0;
		int n;
		Scanner sc1 = new Scanner(System.in);
		x = sc1.nextDouble();
		n = sc1.nextInt();
		sc1.close();
		double temp=1; // 第i项绝对值
		for (int i = 1; i <= n; i++) {
    
    
			temp = (-1)*temp*x*x/(2*i*(2*i-1));
			sum += temp;
		}
//		System.out.printf("%.8f", sum);
		System.out.println(String.format("%.8f", sum));
	}
}

分析とまとめ:凝視法では、隣接するアイテムの絶対値がx * x /(2i(2 i-1))倍異なることがわかります。したがって、毎回乗算を行い、計算されたデータ再利用します

おすすめ

転載: blog.csdn.net/qq_43341057/article/details/105495392