Rozwinięcie logarytmu w szereg potęgowy w C

0

Witam. Mój kod poniżej liczy jakoś, ale z dużym błędem i byłbym wdzięczny gdybyście wskazali możliwe błędy:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    double x, s, w;
    int i, k, n;
    do {
        printf("\n podaj x");
        k = scanf("%lf", &x);
        if (k == 0)
            printf("blad formatu");
        fflush(stdin);
    } while (k == 0);
    do {
        printf("\n podaj n");
        k = scanf("%d", &n);
        if (k == 0 || k > 160)
            printf("blad formatu");
        fflush(stdin);
    } while (k == 0 || k > 170);
    s = x;
    w = x;
    for (i = 1; i < n; i++) {
        w = -w * pow(x, i + 1) / i;
        s = s + w;
    }
    printf("wartosc rowna sie %lf", s);
    getch();
    return 0;
}
0

Nie wiem, co rozumiesz przez duży błąd, ale mam nadzieję, że zapoznałeś się z tym czym są liczby zmiennoprzecinkowe?

0

No bo jest źle! Co to ma być: w = -w * pow(x, i + 1) / i;? W tej jednej linijce widzę aż trzy błędy (jeden błąd związany z linijką następną)!

  • rozwijasz w szereg względem 1, a nie 0 (logarytmu nie da się rozwinąć w szereg w okolicy zera, bo tam nie ma dobrze zdefiniowanej wartości)
  • po co te pow
  • dzielenie przez i nie w tym miejscu

Błąd bonusowy:

  • jak już rozwijasz w szereg w okolicy jedynki, to akceptowalny zakres argumentów takiego szeregu to (0, 2)!

Czemu wszystko robisz w main? Zdefiniuj sobie funkcję: double logSeries(double x, int n).

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