Lupuz.de: Artikel-Portal / Magazin

Zurück   Postpla.net - die Forum Community > PC, Internet und Technik > Coder's Area

Reihenentwicklung: e^x

Anzeigen:

Thema geschlossen
 
Themen-Optionen Thema durchsuchen
Lynx
Alt 06.08.2006, 16:07   #1
Standard Reihenentwicklung: e^x

Moin zusammen!

Kann mir hier vielleicht wer helfen?

2 Aufgabe:
Reihenentwicklung

2.1
Erstellen Sie einen Algorithmus mit Namen exp, der e^x mit Genauigkeit ε berechnet und als Funktionswert zurückliefert! Der Wert von e^x soll dabei aus den reellwertigen Eingabeparametern x und ε nach folgender Vorschrift berechnet werden:

Die Reihenentwicklung soll abgebrochen werden, wenn die Addition eines weiteren Terms keine Änderung von e^x bewirkt, die größer ist als die vorgegebene (absolute) Genauigkeit ε. Hinweis: Überlegen Sie, wie sich von einem Summanden zum nächsten der Zähler und der Nenner verändern!

2.2
Übersetzen Sie Ihren Algorithmus in eine fehlerfrei compilierbare und lauffähige C-Funktion!
Ich bin grad bei Aufgae 2.2

Mein Lösungsvorschlag wäre:
Code:
#include <stdio.h>
#include <stdlib.h>

double exp (double x, double eps) {
    int n=1;
    double summe=1;
    double nenner=1;
    double zaehler=1;
    
    while (summe > eps) {
          nenner=nenner*n;
          zaehler=zaehler*x;
          
          summe=summe+(zaehler/nenner);
          n++;
          }
    return summe;
}

double x,eps;

int main()
{
    printf("Bitte Exponent zu e eingeben: ");
    scanf("%d",&x);
    printf("\n\nBitte Genauigkeit Epsilon eingeben: ");
    scanf("%d",&eps);
    
    printf("%d",exp(x,eps));
    
    system("PAUSE");
    return 0;
}
Leider rechnet mein Rechner sich 'n Ast (ich hab x=1 und eps=0.01 eingegeben). Ich glaub da ist irgendwo 'n Fehler... findet den jemand?

Vielen Dank!
Lynx
 
 
Nach oben
Registrierter PPler
Anonymisierungsmodus aktiv!
Alt 06.08.2006, 16:14   #2
Standard

ich krieg: Abnormal Program Termination: Overflow als Fehler.

woran das nu liegt weiss ich allerdings nich, aber ich probier mal rum

habs:

summe bleibt immer größer als eps, deine schleifenbedingung is falsch sodass eine verdammt große gleitkommastellenzahl (wasn wort) erzeugt wird. also endlosschleife...

Geändert von OrionX (06.08.2006 um 16:21 Uhr).
 
 
Nach oben
Lynx
Alt 06.08.2006, 16:21   #3
Standard

Echt?!
Ich bekomm keinen Fehler...

Welchen Compiler hast Du genutzt?
Ich google mal nach Deiner Fehlermeldung.

edit: aha. dankeschön. dan werd ich mal die schleife umbasteln.
 
 
Nach oben
Registrierter PPler
Anonymisierungsmodus aktiv!
Alt 06.08.2006, 16:26   #4
Standard

Borland BC 3.1
 
 
Nach oben
StephanR.
Alt 06.08.2006, 16:44   #5
Standard

hi,

also ich hab hauptsächlich geändert:
- funktion exp zu exp2 umbennant
- scanfs geändert zu scanf("%lf"...
- printf ebenfalls geändert zu printf("%lf"


kompiliert mit gcc-Version 3.3.6

Ich denke jedoch das dein Algorithmus falsch ist weil ich immer nur 1.0000 rausbekomme.

Code:
#include <stdio.h>

double exp2 (double x, double eps) {
    int n=1;
    double summe=1;
    double nenner=1;
    double zaehler=1;

    while (summe > eps) {
          nenner*=n++;
          zaehler*=x;

          summe+=(zaehler/nenner);
    }
    return summe;
}

int main()
{
    double x,eps;
    printf("Bitte Exponent zu e eingeben: ");
    scanf("%lf",&x);
    printf("\n\nBitte Genauigkeit Epsilon eingeben: ");
    scanf("%lf",&eps);

    printf("%lf",exp2(x,eps));

    return 0;
}

Geändert von StephanR. (06.08.2006 um 16:52 Uhr).
 
 
Nach oben
Sivar
Alt 07.08.2006, 08:00   #6
Standard

Code:
#include <stdio.h>

double expo (double x, double eps) {
    int count=1;
    int abbruch=0;
    double summe=1;
    double nenner=1;
    double zaehler=1;
    double bruch=0;

    while (!abbruch) {
          nenner*=count++;
          zaehler*=x;
          bruch=zaehler/nenner;
          if (bruch<=eps) abbruch=1;
          summe+=bruch;
    }
    return summe;
}

int main()
{
    double x,eps;
    printf("Bitte Exponent zu e eingeben: ");
    scanf("%lf",&x);
    printf("\n\nBitte Genauigkeit Epsilon eingeben: ");
    scanf("%lf",&eps);
    printf("%lf",expo(x,eps));
    return 0;
}
 
 
Nach oben
Lynx
Alt 07.08.2006, 15:56   #7
Standard

Vielen Dank!

Ich hab's verstanden.

Die Klausur kann (bald) kommen...
 
 
Nach oben
Anzeigen:
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche



Alle Zeitangaben in WEZ +2. Es ist jetzt 04:02 Uhr.


Lupuz.de - wir können auch anders!
©1998 - 2008, Lupuz:Information-Network
Powered by vBulletin Version 3.7.1 (Deutsch), Jelsoft Enterprises Ltd.
Grüne Links?

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.