Genauigkeit von Double - e auf x Stellen genau



  • Hallo zusammen

    Wir haben in Mathe die Aufgabe bekommen, die Eulersche Zahl zu berechnen mit Excel 🙄 😃 auf mindestens 3 Stellen, und schauen wie gross n ist.
    an=(1+1n)na_{n}=(1+\frac{1}{n})^n
    Da mir das zu leicht und zu blöd war hab ich nun ein C++ Progrämmchen geschrieben um mehr Stellen zu bekommen, aber irgendwie ist bei 15 Nachkommastellen schluss. Ist das so? Was gibt es für Datentypen, die genauer sind?

    Hier mal mein Code:

    #include <iostream>
    #include <sstream>
    #include <iomanip>
    #include <string>
    #include <cmath>
    
    using namespace std;
    
    //Gefunden im C++ Forum :)
    int read_int_from_cin( std::string const &prompt ) {
        string entered;
        stringstream sstr;
        int ret;
        do {
            sstr.clear();
            cout << prompt << flush;
            getline( cin, entered );
            sstr.str( entered );
            sstr >> ret;
        } while( !sstr );
        return ret;
    }
    
    int main(int argc, char *argv[])
    {
        int n = read_int_from_cin( "Enter n: " );
        cout.precision(20);
        cout.setf( ios::fixed, ios::floatfield );
        double e = 0;
        for( int i = 1;
            ( e < 2.718281828459045235360 
            || e >= 2.718281828459045235361 ) // Stoppe, wenn Ergebniss genau genug
            /*i <= n*/; // War: Stoppe, wenn n mal gerechnet
            ++i )
        {
            e = pow( ( 1.0 + pow( i, -1.0 ) ), i ); // Die Formel
            n = i;
        }
        cout << "n=" << setw(6) << n << " e=" << e << endl;
        return 0;
    }
    

    Und zweitens wollt ich gern prüfen, bei welchem n jede Nachkomma-Stelle richtig ist. Hab aber keine Idee das zu tun, ausser mit x-mal if Abfragen ala

    if( e >= 2.71 && e < 2.72 )
        gebe aus: 2te Stelle erreicht in n Zyklen
    if( e >= 2.718 && e < 2.719 )
        gebe aus: 3te Stelle erreicht in n Zyklen
    

    Vielen Dank schonmal im voraus.



  • Simon&Simon schrieb:

    Da mir das zu leicht und zu blöd war hab ich nun ein C++ Progrämmchen geschrieben um mehr Stellen zu bekommen, aber irgendwie ist bei 15 Nachkommastellen schluss. Ist das so?

    Ja, afaik hat double (in etwa?) 15 signifikante Nachkommastellen.

    Simon&Simon schrieb:

    Was gibt es für Datentypen, die genauer sind?

    Im C++-Standard keine, aber es gibt verschiedene Mathe-Bibliotheken, die sicher auch genauere Fließkommazahlen haben. Ein Beispiel für eine solche Bibliothek kann ich dir jetzt allerdings nicht nennen.


Log in to reply