Wie ktos jak napisac takie sumowanie w C, wyskakuje błąd -1.INDOO

0

wachania o duzej amplitudzie.png

funkcja silnia:
double silnia (double liczba);
double silnia (double liczba)
{
double sil;
if (liczba<0) return 0;
if (liczba==0 || liczba==1) return 1;
sil = liczba*silnia(liczba-1);
return sil;
}

Sumowanie :
const double kat=30;
for(i=1;i<=n;i++)
{

o=o+silnia(2*i)/pow(pow(2,i)*silnia(i),2)*pow(sin(kat)/2,2*i));

}

Kompiluje sie , ale zamiast wart 'o' wyswietla błąd -1.#INDOO

1

Bo silnia ci szybko przepełnia zakres double.
Wyliczaj kolejny element sumy z poprzedniego elementu.

Coś w tym guście:

const double angle=30;
double sum=0,item=1,s=sin(angle*M_PI/360);
for(unsigned i=1;i<=n;++i)
  {
   double add=s*(i-0.5)/i;
   item*=add*add;
   sum+=item;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1