문제

Comp SCI 클래스에서 SIN 기능을 처음부터 만들어야하며 솔루션에 가까워지고 있습니다. 그러나 나는 여전히 몇 가지 문제가 있습니다. 0.5pi 이하의 값을 넣으면 작동하지만 그렇지 않으면 잘못된 결과를 얻습니다. 지금까지 내가 가지고있는 코드는 다음과 같습니다.

double i=1;
double sinSoFar = 0;
int term = 1;
while(i >= .000001)
{
    i = pow(-1, term + 1) * pow(sinOf, 2*term-1) / factorial(2*term-1);
    sinSoFar=sinSoFar + i;
    term++;
}
도움이 되었습니까?

해결책

Federico가 지적한 것처럼 문제는 아마도 Factorial () 또는 pow ()에있을 것입니다. 나는 당신의 함수를 수학 클래스에 제공 한 pow () 함수로 대체하는 테스트를 실행했으며,이 factorial () :

public static long factorial(long n) {
        if      (n <  0) throw new RuntimeException("Underflow error in factorial");
        else if (n > 20) throw new RuntimeException("Overflow error in factorial");
        else if (n == 0) return 1;
        else             return n * factorial(n-1);
} 

다른 팁

일부 조언 :

  • 용어 = 0으로 시작합니다. 표준 MacLaurin 확장도 마찬가지입니다.
  • 힘과 계승을 계산하십시오 당신이 자전거를 타는 동안 (즉, 각 단계에서 업데이트). 문제는 pow () 또는 factorial () 내에있을 수 있습니다.

편집하다. 제안 : 일단 K-Th 용어를 계산 한 후에는 (k+1) -th를 계산할 수 있습니다.

  • 곱하기 (-1)
  • Sinof^2를 곱합니다
  • (2k+2) (2k+3)로 나누기

이런 식으로 당신은 완전히 할 수 있습니다 피하다 힘과 계승의 계산.

0-1/2pi 외부의 값까지는 범위 내부의 값에서 모두 계산할 수 있습니다.

// First, normalize argument angle (ang) to -PI to PI, 
// by adding/subtracting 2*PI until it's within range
if ( ang > 1/2PI ) {
    sin = sin ( PI - ang );
}
else if ( ang < 0 ) {
    sin = -1 * sin( -1 * ang );
}
else {
    // your original code
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top