공식 계산식에 따라 cosx의 근사값을 계산하세요 ~ 【계수 계산시 오버플로】

【문제 설명】

알려진 cosx의 대략적인 계산 공식은 다음과 같습니다.

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

여기서 x는 라디안이고 n은 0보다 크거나 같은 정수입니다. 위의 근사 계산식을 이용하여 사용자가 입력 한 x와 n의 값에 따라 cosx의 근사값을 계산하는 프로그램을 작성하고, 출력 결과 소수점 뒤에 8 자리가 필요합니다.

[입력 양식]

콘솔에서 10 진수 x (0 <= x <= 10)와 정수 n (0 <= n <= 1000)을 두 숫자 사이에 공백으로 구분하여 입력합니다.

【출력 형식】

콘솔 출력 공식 결과 : 소수점 이하 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 비트가 예약되어 있습니다.

참고 : 데이터의 정확성과 일관성을 보장하려면 이중 데이터 유형을 사용하여 계산 결과를 저장하십시오.

【등급】

이 질문은 위 공식의 계산 결과, 총 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 개까지 저장합니다! , 그래서 직접 라인은 아무데도 계승 .

그런 다음 개선되었습니다.

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));
	}
}

분석 및 요약 : stare 방법으로 인접 항목의 절대 값이 x * x / (2i (2 i-1)) 배 차이가 있음을 알 수 있으므로 매번 곱셈을 하고 계산 된 데이터를 재사용합니다 .

추천

출처blog.csdn.net/qq_43341057/article/details/105495392