문제
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
}
제휴하지 않습니다 StackOverflow