2017-04-06 13 views
0

간단한 계산기를 만들고 e^x 함수 부분입니다.math.h 및 계승 함수를 사용하지 않고 Taylor Series를 사용하여 e^x 함수를 코딩했습니다.

양수에서는 작동하지만 음수이면 x에서는 작동하지 않습니다. 어떻게 너무 부정적인 X 작동 할 수 있습니까?`나는 위의 의견에 쓴의 경우

double calculateEx(double x) { 
double beforeResult = 1, afterResult = 1, term = 1, error = 1, i = 1, j; 

while (error > 0.001) { 
    afterResult = beforeResult; 
    for (j = 1; j <= i; j++) { 
     term *= x; 
    } 
    term /= fact(i); 
    afterResult += term; 
    error = (afterResult - beforeResult)/afterResult; 
    if (error < 0) error * -1; 
    error *= 100; 
    beforeResult = afterResult; 
    term = 1; 
    i++; 
} 
return beforeResult; 

}

double fact (double num) { 
int i, j; 
double total = 1; 

for (i = 2; i <= num; i++) { 
    total = total * i; 
} 
return total; 

}

+0

왜''을 사용하지? 'exp' 함수는 C로 쉽게 작성할 수있는 코드보다 더 빠를 것입니다 (경우에 따라 단일 기계 명령어 일 수도 있지만, 적어도 라이브러리 작성자는이를 최적화 할 것으로 기대할 수 있습니다). 인생의 1 인치 이내). – alastair

+0

작은 코드 검토 빨간색 깃발 : * 고리가 3 개 있습니다. 정말 필요한가요? –

+0

제 학교에서 일하는 교수입니다. 교수님은 math.h 라이브러리를 사용하지 말 것을 명령하셨습니다. 나 자신의 작품에서 나중에 사용하겠습니다. @alastair – april

답변

2

를 통해 지수을 계산 테일러 시리즈

exp(x) = 1 + x/1 + x**2/2! + ... + x**n/n! 

당신이 원하지 않는는, 통지하시기 바랍니다 어떤 계승하는 n-1 번째 용어는 다음

t(n-1) = x**(n-1)/(n-1)! 

경우 ,963,210

구현할 모두가 왜 그 :

double calculateEx(double x) { 
    double term = 1.0; 
    double result = term; 

    /* 
     the only trick is that term can be positive as well as negative; 
     we should either use abs in any implementation or putr two conditions 
    */ 
    for (int n = 1; term > 0.001 || term < -0.001; ++n) { 
     term = term * x/n; 

     result += term; 
    } 

    return result; 
    } 
0

확인, 내가 <math.h>을 사용하십시오 가능한 한 모든 질문을했지만 질문을 한 후 :

  1. Negati 숫자가 0보다 작 으면 x이 음수라면 부정하면 어떻게 될지 고려하십시오.

  2. 계승표를 저장하여 계승 함수를 제거 할 수 있습니다. 당신은 그 많은 요소들을 필요로하지 않을 것입니다.