Summenformel

ev95

Grünschnabel
Hallo,

ich möchte die Summenformel von" (-1)^i * x^(2i+1)" in C programmieren. Hört sich nicht so schwer an, jedoch tut mein Programm nicht das was ich erwarte.
Hier ist mein Code:

C++:
#include <stdio.h>
#include <math.h>

int main (){

int j=0;
int wert = 0;
double x;

int n;



scanf("%d", &n);
scanf("%f", &x);

for(j = 0; j <=n ; j++){

wert = wert + pow(-1, j) * pow(x, 2*j+1);           

}

printf(" %d", wert);

return 0;


}        

[/ Code


Egal was ich eingebe es kommt immer null heraus und ich sehe gerade leider nicht warum.
Dankeschön im voraus.
 
Zuletzt bearbeitet von einem Moderator:
Lösung
Man verzeihe mir den Doppelpost.

Das Problem ist wie immer viel einfacher als gedacht, und gleichzeitig viel schwieriger:
scanf("%f") liest einen float-wert (4 Bytes). Ein double ist 8 Bytes. Also wurden denormalisierte Floating Points gelesen (die winzigen mit e-315).
Die Lösung:
C:
// Statt
scanf("%f", &x);
// So:
scanf("%lf", %x);
Das "l" steht für "long" = 8 Bytes = sizeof(double) :)

Sorry, ich hätte es früher sehen müssen :(

Gruss
cwriter
Ich möchte auch gerne - nur der Vollständigkeit halber - aufzeigen, dass man im Prinzip auch direkt eine Endformel angeben kann:
C:
double summe(double x, unsigned int n)
{
    if (x > 0.9999999 && x < 1.0000001) {
        // x ist quasi 1
        return n % 2 == 0 ? 1.0 : 0.0;
    }
    if (x < -0.9999999 && x > -1.0000001) {
        // x ist quasi -1
        return n % 2 == 0 ? -1.0 : 0.0;
    }
    if (x > -0.0000001 && x < 0.0000001) {
        // x ist quasi 0
        return 0.0;
    }
    
    unsigned int N = n / 2;
    
    double ergebnis = (x - pow(x, 3)) * (pow(x, 4*N + 4) - 1) / (pow(x, 4) - 1);
    
    if (n % 2 == 0) {
        // Korrekturterm
        ergebnis += pow(x, 2*(n+1) + 1);
    }
    
    return ergebnis;
}

Aber ich verstehe schon, dass das ja gar nicht der eigentliche Zweck eurer Übung war ;)

Gruß Technipion
 

Neue Beiträge

Zurück