Eulersche Zahl mit C++



  • Hallo zusammen, ich habe die Aufgabe, die Eulersche Zahl in der Konsole anzeigen zu lassen, so dass man den Präzisionsgrad selber angeben kann, bisher bin ich so weit gekommen:

    #include <iostream>
    using namespace std;

    int main()

    {

    int p;
    double k=1, e2=1, e1=1;
    int i;

    cout << "Waehle die Praezision: " << endl;
    cin >> p;

    for (int i=1; ; i+1)

    {

    e1= (1/k) + e1;
    k = k * (i+1);

    if (e2 == e1) {
    break;
    }

    e2=e1;
    i=i+1;
    }

    cout.precision(p+1);
    cout << e1 << endl;

    return 0;

    }

    leider gibt mir die konsole danach nur eine maximal 16-stellige Zahl an, obwohl diese ja grösser sein müsste ( für z.B.: p == 29)

    Danke im voraus



  • Maximale Präzision meint wahrscheinlich, dass du die Zahl so genau darstellen sollst, wie es der Datentyp double erlaubt.



  • Ein double kann nur begrenzt viele Stellen beinhalten. Von daher musst du die Ziffern einzeln ausgeben.



  • @nexus, ja das ist schon so gedacht, ich dachte nur, dass der double noch mehr stellen schaffen müsste und ich daher irgendwo einen fehler gemacht habe



  • entweder machst dir selber ne möglichkeit theoretisch unendlich große zahlen darzustellen oder nimmst die klasse hier:

    http://lnc.sourceforge.net/



  • Sollst du die Zahl nur anzeigen oder auch berechnen?



  • Berechnen und ich muss dazu Schleifen verwenden



  • Der Datentyp double kann nun mal nicht unendlich viele Stellen speichern. Da ändert auch std::cout.precision() nichts daran. Wo liegt nun also das Problem? Wahrscheinlich hast du die maximale Genauigkeit bereits erreicht.



  • hab ich mittlerweile auch gemerkt =), danke für die antworten



  • long double?


  • Administrator

    Fellhuhn schrieb:

    long double?

    long double ist zum Beispiel auf dem Microsoft Compiler auch nur ein double . Da hat man keine Garantie, dass man eine genauere Zahl bekommt. Besser man nimmt z.B. eine BCD-Zahl (Binary Coded Decimal). Dazu gibt es genügend Libs und man kann relativ einfach auch selber eine implementieren.

    Grüssli



  • Dravere schrieb:

    Besser man nimmt z.B. eine BCD-Zahl (Binary Coded Decimal). Dazu gibt es genügend Libs und man kann relativ einfach auch selber eine implementieren.

    Ist das wirklich einfach, vor allem für einen Anfänger? Wenn man es sauber und einigermassen performant lösen möchte, wahrscheinlich nicht...


  • Administrator

    Nexus schrieb:

    Dravere schrieb:

    Besser man nimmt z.B. eine BCD-Zahl (Binary Coded Decimal). Dazu gibt es genügend Libs und man kann relativ einfach auch selber eine implementieren.

    Ist das wirklich einfach, vor allem für einen Anfänger? Wenn man es sauber und einigermassen performant lösen möchte, wahrscheinlich nicht...

    Es ist fast nur abschreiben, weil wenn du weisst, dass du nach BCD suchen musst, dann findest du im Web jede Menge Material darüber.
    Ob ein Anfänger gleiche eine super performante Klasse wird erstellen, bezweifle ich. allerdings bezweifle ich auch, dass dies unbedingt nötig ist. Erst recht bei einem Anfänger 😉
    Es ist aber durchaus eine gute Übung 🙂

    Grüssli



  • Dravere schrieb:

    Es ist aber durchaus eine gute Übung 🙂

    Wenn ich mal Lust und Zeit habe, will ich so etwas auch probieren. 🙂


Anmelden zum Antworten