2016-03-24 2 views
0
int powi(int a,int b) 
{ 
     if(b<0)  
     return 1/powi (a,-b); 
     else if(b==0) 
     return 1; 
     else if(b==1) 
     return a; 
     else 
     return a*powi(a,b-1); 

} 

int factorial(int number) 
{ 
    int x,fac; 
    /* numberi scanfle istemis ona gore dusun */ 
    fac=1; 

    for(x = 1; x <= number; x++) 
    { 
     if (number >= 0) 
     fac = fac * x; 
     else 
     fac=1; 
    } 
return 0; 
} 


void getInputs(int *degree,int *n,int *exit) 
{ 
    scanf("%d %d",degree,n); 
    if(*degree=='e') 
     *exit=1; 
    else 
     *exit=0; 

} 

double cosine(int degree,int n) 
{ 
#define pi 3.14 
int sum,i; 
    if(degree<360 && degree>-1) 
     degree=(degree*pi)/180; 
    else if(degree<0) 
     { do 
       { degree=degree+360; 
       } while(degree<0); 
     degree=(degree*pi)/180; 
     } 
    else 
     { 
     degree=degree%360; 
     degree=(degree*pi)/180; 
     } 

for(i=0;i<n+1;i++) 

    { 
     sum=0; 
     sum=sum+powi(-1,n)*powi(degree,2*n)/factorial(2*n); 


    } 

return 0; 

} 

double sine(int degree,int n) 
{ 
int i,sum; 
#define pi 3.14 
    if(degree<360 && degree>-1) 
     degree=(degree*pi)/180; 
    else if(degree<0) 
     { do 
       { degree=degree+360; 
       } while(degree<0); 
     degree=(degree*pi)/180; 
     } 
    else { 
     degree=degree%360; 
     degree=(degree*pi)/180; 
     } 

for(i=0;i<n+1;i++) 

    { 
    sum=0; 
     sum=sum+powi(-1,n)*powi(degree,2*n+1)/factorial(2*n+1); 
    } 
return 0; 

} 

Привет всем, у меня есть этот маленький мой код, который пытается рассчитать грех и cos через серии Тейлора и Maclorin. Но похоже, что я что-то испортил. Это базовый код без основной функции. Для EX: когда я пытаюсь вызвать sin (30,4), он дает бесконечный цикл. Я действительно не могу найти, где он застрял в нем.Inaporative использование бесконечной петли в C

Небольшая помощь была appriciated. Спасибо за ваше время.

+0

Это не называется «немного кода». На самом деле это слишком много. – haccks

+0

Используйте 'double' вместо' int '. – alain

+0

просто переглядывается, что больше напоминает бесконечную рекурсию, чем бесконечный цикл. Внимательно проверьте powi на предмет проблем, так как все остальные петли выглядят так, как будто они должны прекратиться. –

ответ

0
double sum=0; 
for(i=0;i<n+1;i++) 
{ 
    sum=sum+(double)(powi(-1,n)*powi(degree,2*n+1))/factorial(2*n+1); 
} 

возвращенная сумма;

Попробуйте

  1. и нужно объявить сумму в двойном
  2. при делении длинного выражения whoose вывода может быть десятичным нет. и должны типаж его плавать или двойной
  3. возврата суммы, а затем 0
Смежные вопросы