epsilon unsichtbar?



  • So ich hab nun einen Test mit gmp und long double gemacht und ne Weile im Kreis gerechnet. So, dass ich nach etwas sinnloser Rechnerei wieder meine Ausgangswerte habe, usw.
    Ergebnis: Mit double und gmp tritt irgendwann ein Fehler auf (Also die Ausgangswerte weichen doch sichtbar ab)! Zwar mit gmp deutlich später, zudem dauert damit alles spürbar länger...
    Wie kann das denn sein?! Gibt es nicht Lektüre die dieses Thema behandelt?? 😕 😮



  • eps schrieb:

    Gibt es nicht Lektüre die dieses Thema behandelt?? 😕 😮

    Nein 🙄 Solche dämlichen Probleme haben professionelle Programmierer nicht. :p



  • hör mal her schrieb:

    eps schrieb:

    Gibt es nicht Lektüre die dieses Thema behandelt?? 😕 😮

    Nein 🙄 Solche dämlichen Probleme haben professionelle Programmierer nicht. :p

    Gratulation, der Produktivste Beitrag des Tages!!! 🙄



  • Junge, wenn du 1:1 vergleichst, wirst du irgendwann immer Quantisierungsfehler haben, egal ob diese gleitend oder konstant stattfindet. Verbessere deine Algorithmen.



  • Decimad schrieb:

    Junge, wenn du 1:1 vergleichst, wirst du irgendwann immer Quantisierungsfehler haben, egal ob diese gleitend oder konstant stattfindet. Verbessere deine Algorithmen.

    Joa ich wüsst nur gern wie



  • Wenn du dazu eine abschließende Antwort brauchst, lege ich dir nahe, ein Grundlagenbuch zur Numerik zu lesen. Da kannst du dir sachen wie Fehlerfortpflanzung anschauen, stabile Algorithmen finden und Anregungen um deine eigenen bestmöglich umzusetzen.



  • Decimad schrieb:

    Wenn du dazu eine abschließende Antwort brauchst, lege ich dir nahe, ein Grundlagenbuch zur Numerik zu lesen. Da kannst du dir sachen wie Fehlerfortpflanzung anschauen, stabile Algorithmen finden und Anregungen um deine eigenen bestmöglich umzusetzen.

    Vielleicht glaubst dus nicht aber auf sowas habe ich gewartet. Dankesehr!! 🙂 🙂 🙂



  • Freut mich, dass jemand vor Lektüre nicht zurückschreckt 😉



  • Hallo! 🤡
    Wenn ich auch meinen Senf dazu abgeben darf ... 😃

    #include <iostream>
    #include <limits>
    using namespace std;
    
    int main()
    {
        float a,b;
    
        cout << "Bei relativ großen Zahlen... " << endl;
    
        a = 1+3*numeric_limits<float>::epsilon();
        b = 1-4*numeric_limits<float>::epsilon();
    
        cout << a << '\n' << b << endl;
    
        cout << "...kann der unterschied bis zu 5faches epsilon sein..." << endl;
        b = 1-5*numeric_limits<float>::epsilon();
        cout << b << endl;
        cout << "...ab dann sieht man den Unterschied!\n" << endl;
    
        cout << "Umso kleiner die Zahl, desto größer darf man Epsilon wählen!" << endl;
        a = 0.12345678-10*numeric_limits<float>::epsilon();
        b = 0.12345678-6*numeric_limits<float>::epsilon();
    
        cout << a << '\n' << b << endl;
        cout << "Bis zum 10fachen numeric_limits<float>::epsilon() ..." << endl;
        b = 0.12345678-11*numeric_limits<float>::epsilon();
        cout << b << endl;
    }
    

    Aber warum wird im Terminal denn überhaupt gerundet?? :p



  • Heldin schrieb:

    Hallo! 🤡
    Wenn ich auch meinen Senf dazu abgeben darf ... 😃

    #include <iostream>
    #include <limits>
    using namespace std;
    
    int main()
    {
        float a,b;
    
        cout << "Bei relativ großen Zahlen... " << endl;
    
        a = 1+3*numeric_limits<float>::epsilon();
        b = 1-4*numeric_limits<float>::epsilon();
    
        cout << a << '\n' << b << endl;
    
        cout << "...kann der unterschied bis zu 5faches epsilon sein..." << endl;
        b = 1-5*numeric_limits<float>::epsilon();
        cout << b << endl;
        cout << "...ab dann sieht man den Unterschied!\n" << endl;
    
        cout << "Umso kleiner die Zahl, desto größer darf man Epsilon wählen!" << endl;
        a = 0.12345678-10*numeric_limits<float>::epsilon();
        b = 0.12345678-6*numeric_limits<float>::epsilon();
    
        cout << a << '\n' << b << endl;
        cout << "Bis zum 10fachen numeric_limits<float>::epsilon() ..." << endl;
        b = 0.12345678-11*numeric_limits<float>::epsilon();
        cout << b << endl;
    }
    

    Aber warum wird im Terminal denn überhaupt gerundet?? :p

    Weil mit 0.12345678 das Genauigkeitslimit von float erreicht ist bzw. weil ab 5 ab/aufgerundet wird?


Anmelden zum Antworten