Potrzebuję pomocy w rozwiązania zadania

0

Witajcie
Potrzebuję pomocy przy rozwiązaniu zadanka. Muszę stworzyć funkcję, która wyliczać mi będzie sinusx sumując kolejne wyrazy działania (wzór w załączniku). Doszedłem do tego, że każdy następny element wynika z drugiego, czyli mnożony jest przez -1, licznik mnożony przez x*x, a mianownik zwiększany przez kolejne liczby.

Szczerze mówiąc, siedzę już nad tym dość długo i nie mogę wpaść na ten właściwy sposób rozwiązania, bo niestety, mój sposób nie działa, być może winny jest przekroczony zakres double, ale jak to zastąpić :/

Poniżej zamieszczam, to co udało mi się wypocić.

 double sinus(double x, double eps)
    {
        double sinus = 0.0, tmp = 1.0;
        double licznik = x;
        double mianownik = 1.0;
        int i = 2;
        
        sinus = licznik / mianownik; // 1. element
        
        while( Math.abs(tmp - sinus) > eps )
        {
            tmp = sinus;
            licznik = (-1)*licznik * (x * x);
            mianownik = mianownik * i * (i+1);
            sinus = licznik / mianownik;
            
            i += 2;
        
        }

        
        return sinus;
    }

Proszę Was o pomoc, wskazówki, co zrobić, żeby to działało jak powinno

Pozdrawiam
Sizzla

0

Czekaj, to ma być Java czy C++?

0

W Java, ale jeżeli bardziej czujesz się na siłach w C++ i potrafisz mi pomóc - pisz śmiało, myślę, że zrozumiem.

0

w mianowniku jest operacja silni. Znak !

PS. proszę o skasowanie mojego poprzedniego postu!!!

0

Nie liczę jako tako silni, ponieważ zauważyłem, że:
dla i( k ) = 0, wyrażenie ma postać sinus = 1 * x / 1 (1x -> licznik | 1 -> mianownik)
dla i( k ) = 1, wyrażenie ma postać sinus = sinus * x * x / 1
23
dla i( k ) = 2, wyrażenie ma postać sinus = sinus * x * x / 1
234*5etc

0

ale w liczniku masz coś zepsute ...bo i = 2; a potem to mnożenie - coś źle to widzę.

zrób to najprościej z liczeniem silni - jak zadziała to będziesz optymalizował.

no i to (-1) ma być potęgowane.....

0

Wszystko musi się zawierać w 1 metodzie. Nie może to być w taki sposób jaki przedstawiłeś - silnia osobno i potęga osobno, a potem dzielenie.
A co do tego -1, to zauważ, że obliczając pierwszy element mam (-1) 0 = 1, później po kolejnych przebiegach będzie (-1)1 = -1, następnie (-1)^2 = 1, czyli na zmianę raz będzie plus raz minus i to właśnie się tam zawiera, bo - * - daje + , a + * - daje - , podstawowe zasady.

1

@ae, bzdury opowiadasz.

 double sinus(double x, double eps)
    {
        double sinus = 0.0, tmp = 1.0;
        double licznik = x;
        double mianownik = 1.0;
        int i = 2;
 
        sinus = licznik / mianownik; // 1. element
 
        while( Math.abs(tmp - sinus) > eps )
        {
            tmp = sinus;
            licznik = (-1)*licznik * (x * x);
            mianownik = mianownik * i * (i+1);
            sinus += licznik / mianownik;
 
            i += 2;
 
        }
 
 
        return sinus;
    }

sinus to ma być suma wyrazów, a nie ostatnio wyliczony wyraz.

0

O cholerka, nie wiem jakim cudem przeoczyłem ten plusik. Teraz na moje oko wszystko działa.
Stokroć dzięki!

0

piękne te teorie z silnią i potęgą osobno, dobrze zauważyłeś ale masz liczyć SUMĘ, znaczy nie
sinus = licznik/mianownik tylko....
(jak to miło być cytowanym, szkoda, że Erdosa liczby mi to nie podwyższa)

nie zauważyłem drugiej strony

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