2011-10-19 4 views
4

결과를 얻는 이유 1을 알아낼 수 없습니다. # 입력으로 1을 줄 때 # my_exp()에서 # INF. 다음은 코드입니다.exp 함수를 사용하여 C++

double factorial(const int k) 
{ 
    int prod = 1; 
    for(int i=1; i<=k; i++) 
     prod = i * prod; 
    return prod; 
} 

double power(const double base, const int exponent) 
{ 
    double result = 1; 
    for(int i=1; i<=exponent; i++) 
     result = result * base; 
    return result; 
} 

double my_exp(double x) 
{ 
    double sum = 1 + x; 
    for(int k=2; k<50; k++) 
     sum = sum + power(x,k)/factorial(k); 
    return sum; 
} 
+0

문제를 설명하는 자체 포함 코드 스 니펫을 제공하십시오. –

+0

'x'의 값은 무엇입니까? 1. # INF'? – NPE

+0

x = 1은 1을 제공합니다. # INF – Sean

답변

7

factorial 함수에 정수가 넘칩니다. 이로 인해 0이 출력됩니다. 49!2^32으로 나눌 수 있으므로 factorial 함수는 0을 반환합니다.

그런 다음 그것을 나누어 무한대로 만듭니다.

double prod = 1; 
6

대신 완전히 전원과 확장의 각 용어에 대한 계승 조건을 평가, 당신은 k 번째 용어는 K-1와 어떻게 연관되는지를 고려해야합니다 그래서 해결책은 proddouble에 변경하는 것입니다 '용어를 사용하고이 용어를 기반으로 각 용어를 업데이트하십시오. 그렇게하면 힘과 계승 함수에서 더러운 오버플로를 피할 수 있습니다 (더 이상 필요하지 않음). 예 :

double my_exp(double x) 
{ 
    double sum = 1.0 + x; 
    double term = x;     // term for k = 1 is just x 
    for (int k = 2; k < 50; k++) 
    { 
     term = term * x/(double)k; // term[k] = term[k-1] * x/k 
     sum = sum + term; 
    } 
    return sum; 
} 
-2

최대 k 형식 50을 좋아하면 30으로 줄일 수 있습니다.

및 귀하의 코드가 0 근처에 하나만 질문이 있습니까?