Iteracja z wartością plus i minus na zmianę.

0

Mam do rozwiązania zadanie w którym muszę użyć podanego wcześniej wzoru. Nie umiem ogarnąć jak iterować raz z plusem a raz z minusem liczby nieparzyste.

function factorial(n){
    var sum = 1;
    for (var i=1;i<n+1;i++){
        sum *= i;
    }
    return sum;
}
function mySin(x, iterNum){
    var result = (x/1);
    for(i=2; i<iterNum; i++){
        if(i%2!=0){
            result -= ((Math.pow(x,i))/factorial(i));
            console.log(result);
        }
    }return result;
}
console.log(mySin(10, 100));

Wzór: "sin(x) = (x^1)/1! - (x^3)/3! + (x^5)/5! - (x^7)/7! + (x^9)/9! - (x^11)/11! + ..."
Poustawiałem funkcję tak że liczy od i = 2 bo i = 1 podstawiłem wcześniej pod zmienną result. Warunek z modulo definiuje używanie liczb nieparzystych. Myślałem nad krotnościami liczby 3 ale nie pasuje mi to. Do zmiennej result raz chcę dodać a raz odjąć kolejne iteracje wzoru w nawiasach i nie wiem jakim warunkiem się obronić. Macie jakieś pomysły? Dziękuję z góry za odpowiedz. :))

1

function mySin(x, iterNum)
{
    var result = (x/1);
    var powX = x;
    var factorial = 1;
    var sign = 1;
    for(i=2; i<iterNum; i++)
    {
        powX *= x;
        factorial *= i;
        if(i%2!=0)
        {
            sign *= -1;
            result += sign * powX /  factorial ;
            console.log(result);
        }
    }
    return result;
}
console.log(mySin(10, 100));
0

No tak, wystarczy mnożyć nawias przez kolejne potęgi -1 :D Takie proste rzeczy a jak się jakaś klepka w głowie nie przestawi to człowiek będzie o tym myślał godzinami. Dziękuję bardzo.

1

Każdy takie rzeczy robi inaczej:)
Ja np. nie zrobiłbym iteracji w pętli co 1 tylko co 2. Nie trzeba sprawdzać czy liczba jest podzielna przez 2. Potem dodatkowo w warunku w pętli sprawdzał co drugą liczbę parzystą czyli czyli %4.

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