epsilon unsichtbar?



  • klarox schrieb:

    klar schrieb:

    eps schrieb:

    Dein if Funktioniert ja jetzt nur mit Nullen, aber kann ich auch die "Krümel" von beliebigen Zahlen entfernen?
    🕶

    denke schon, was auch immer Krümel hier sind.

    asozial?

    Nur ein bisschen gemein, aber du siehst ja, keiner versteht ihn so richtig. 😃



  • drakon schrieb:

    Wenn dir float nicht genau genug ist, musst du wohl auf einen anderen Typen eingehen, wie z.B einer Bigint Klasse, oder so, die eine (fast) beliebige Genauigkeit anbietet.
    z.B hier:
    http://sourceforge.net/projects/cpp-bigint/

    Klingt logisch, ja ... werde mich mal damit befassen 😃 Ty



  • drakon schrieb:

    Wenn dir float nicht genau genug ist, musst du wohl auf einen anderen Typen eingehen, wie z.B einer Bigint Klasse, oder so, die eine (fast) beliebige Genauigkeit anbietet.
    z.B hier:
    http://sourceforge.net/projects/cpp-bigint/

    Da er aber mit Gleitkommazahlen arbeiten will, hilft ein BigInt wenig.
    Eher trifft es hier gmp:
    http://www.gmplib.org
    Library for arithmetic on arbitrary precision integers, rational numbers, and floating-point numbers

    // vllt. ist ja auch gleich das hier interessant:
    http://www.cgal.org/



  • klar schrieb:

    klarox schrieb:

    klar schrieb:

    eps schrieb:

    Dein if Funktioniert ja jetzt nur mit Nullen, aber kann ich auch die "Krümel" von beliebigen Zahlen entfernen?
    🕶

    denke schon, was auch immer Krümel hier sind.

    asozial?

    Nur ein bisschen gemein, aber du siehst ja, keiner versteht ihn so richtig. 😃

    Faszinierend! 😮



  • franz schrieb:

    drakon schrieb:

    Wenn dir float nicht genau genug ist, musst du wohl auf einen anderen Typen eingehen, wie z.B einer Bigint Klasse, oder so, die eine (fast) beliebige Genauigkeit anbietet.
    z.B hier:
    http://sourceforge.net/projects/cpp-bigint/

    Da er aber mit Gleitkommazahlen arbeiten will, hilft ein BigInt wenig.
    Eher trifft es hier gmp:
    http://www.gmplib.org
    Library for arithmetic on arbitrary precision integers, rational numbers, and floating-point numbers

    Ja die kenn ich sogar. Meint ihr es reicht wenn ich meine Punkte "lokal" für die Rechnungen in genauere Typen konvertiere und dann wieder zurück, oder muss ich nu alles umschreiben?? 😕



  • Was hilft es dir, wenn du lokal (wenn die Werte schon gegeben sind, berechnet oder aus der Datei gelesen) genauer rechnest, dein Problem aber ist, dass die Konvertierung float -> string -> float verlustbehaftet ist?
    Ich kann mir kaum vorstellen, dass man bei komplizierten Gleitkomma-operationen lange ohne Vergleiche mit einem Epsilon auskommt. Der Verlust der Konvertierung ist natürlich ärgerlich (du könntest auch binär rausschreiben oder mit größerer Genauigkeit, damit sich die Fehler in Grenzen halten), aber über kurz oder lang wirst du sowieso Abweichungen haben, die theoretisch nicht sein sollten. Für solche Grenzfälle müssen dann Sonderbehandlungen eingeführt werden, die mit gut gewählten Epsilon-Werten arbeiten.
    Wenn Abweichungen von einem solch kleinen Espilon bei dir aber schon zu katastrophalen Veränderungen führen, solltest du evtl. überlegen auf numerisch stabilere Algorithmen und Darstellungsweisen umzusteigen.



  • Decimad schrieb:

    Was hilft es dir, wenn du lokal (wenn die Werte schon gegeben sind, berechnet oder aus der Datei gelesen) genauer rechnest, dein Problem aber ist, dass die Konvertierung float -> string -> float verlustbehaftet ist?
    Ich kann mir kaum vorstellen, dass man bei komplizierten Gleitkomma-operationen lange ohne Vergleiche mit einem Epsilon auskommt. Der Verlust der Konvertierung ist natürlich ärgerlich (du könntest auch binär rausschreiben oder mit größerer Genauigkeit, damit sich die Fehler in Grenzen halten), aber über kurz oder lang wirst du sowieso Abweichungen haben, die theoretisch nicht sein sollten. Für solche Grenzfälle müssen dann Sonderfälle eingeführt werden, die mit gut gewählten Epsilon-Werten arbeiten.

    Ich dachte dass dann zB die Abweichung im Beispiel mit den Ebenen so klein werden dass sie keine Rolle mehr spielen. Um die Konvertierung in strings komme ich nicht herum. Das zeug muss in einer lesbaren datei stehen ...
    Bin jetzt ein bisschen ratlos 😞 😕



  • Die meisten CPUs rechnen intern so genau, dass der Rechenfehler kleiner ist, als was durch float oder double unterscheidbar wäre. Wobei sich die Fehler in dem Fall natürlich aufsummieren. Darf ich Fragen, was du berechnest und wo diese Ungenauigkeiten zu katastrophalen Veränderungen des Ergebnisses führen?



  • franz schrieb:

    Da er aber mit Gleitkommazahlen arbeiten will, hilft ein BigInt wenig.
    Eher trifft es hier gmp:
    http://www.gmplib.org
    Library for arithmetic on arbitrary precision integers, rational numbers, and floating-point numbers

    Jop. Ich wusste nicht mehr, welche Bibliothek es genau ist,welche auch immer empfohlen wird darum habe ich einfach mal das erste bei google als Beispiel genommen.



  • Decimad schrieb:

    Die meisten CPUs rechnen intern so genau, dass der Rechenfehler kleiner ist, als was durch float oder double unterscheidbar wäre. Wobei sich die Fehler in dem Fall natürlich aufsummieren. Darf ich Fragen, was du berechnest und wo diese Ungenauigkeiten zu katastrophalen Veränderungen des Ergebnisses führen?

    Es kann durchaus sein, dass die Ungenaugkeit sich schnell aufstaut und dann zu unverantwortlichen Fehlern führen. Das ist natürlich vom Kontext abhängig und manchmal auch nicht durch einen anderen Datentypen lösbar. (z.B Matrizenberechnungen) Da müssen dann anderen Wege gefunden werden, um die Ungenaugkeit auszugleichen..



  • drakon schrieb:

    Decimad schrieb:

    Die meisten CPUs rechnen intern so genau, dass der Rechenfehler kleiner ist, als was durch float oder double unterscheidbar wäre. Wobei sich die Fehler in dem Fall natürlich aufsummieren. Darf ich Fragen, was du berechnest und wo diese Ungenauigkeiten zu katastrophalen Veränderungen des Ergebnisses führen?

    Es kann durchaus sein, dass die Ungenaugkeit sich schnell aufstaut und dann zu unverantwortlichen Fehlern führen. Das ist natürlich vom Kontext abhängig und manchmal auch nicht durch einen anderen Datentypen lösbar. (z.B Matrizenberechnungen) Da müssen dann anderen Wege gefunden werden, um die Ungenaugkeit auszugleichen..

    Ja genau und wie ich versucht habe zu verdeutlichen sind die Rechnungen die zu den Punkten führen sehr sehr lang ... das erklärt auch warum das grundsätzlich immer auftritt, wenn das Programm schon ne weile läuft.

    Ich hab jetzt testweise meine Zwischenergbnisse in dateien geschrieben und sofort wieder eingelesen, weil: Es macht keinen Sinn dass das Programm andere Ergebnisse liefert wenn man abspeichert und später weitermacht...
    Wie wäre es eleganter (und vor allem schneller/sicherer) als in dateien zu schreiben? Etwa in std::string zwischenspeichern 😕 😕
    Und was noch wichtiger ist: Ist die Genauigkeitsverlust bei der Konvertierung in binäre Dateiformate identisch?
    🤡



  • Also solange es vertretbar ist, würde ich so einen Typen nehmen, der dir das ganze ganz exakt machen kann (natürlich auch nur auf eine beschränkte Anzahl Stellen,aber die sollten besser sein, als bei float). Ich kenne die Lib jetzt nicht genau,aber ich denke, dass die sicher auch richtig speichern/laden können,ohne irgendwelche Verluste.



  • 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 😉


Anmelden zum Antworten