Präzison der Datentypen



  • Hallo, ich schreibe derzeit ein Programm, welches verschiedene numerische Algorithmen durchführt.Mein Problem dabei ist,dass die gängigen Datentypen zur Zahlendarstellung einfach zu ungenau sind. Erfahrungen haben gezeigt,dass man z.B. long double maximal 12 Nachkommastellen glauben kann,danach wirds spekulativ. Hat jemand eine Lösung für mein Problem?Hab nicht so wirklich Bock,extra mir einen neuen Datentypen zu programmieren...

    Danke im Vorraus
    Sebastian



  • Hallo

    siehe zum Beispiel hier.

    bis bald
    akari



  • Hallo,

    Genauer bekommst du es mit den eingebauten Typen nicht. Versuch lieber damit auszukommen. Du könntest natürlich auch spezielle Datentypen mit höherer Genauigkeit durch Verwendung spezielle Bibliotheken bekommen. Da dürfte aber die Performance stark einbrechen. Wenn es dir darauf nicht ankommt nimm halt so eine Bibliothek.
    Wenn du mit dem BCB arbeitest kann ich dir NTL empfehlen. Die ist zwar langsamer als GMP, dafür läuft sie aber auch mit dem BCB.
    [edit]
    @akari
    Hast du GMP mal mit dem BCB zum Laufen bekommen?
    [edit]



  • Hallo

    nein, habe es auf dem Builder nie probiert, nur vor einiger Zeit auf dem GNU-Compiler.

    bis bald
    akari



  • z.B. fortgesetzte Teilung mit 2 und anschliessende Bestimmung der Reste
    (Nachkommaanteil vorher durch durch Multiplikation egalisieren.)



  • Ok, danke für die Tips, werd mal gucken was mich das Ganze an Performance kostet.
    Würde natürlich alles darum geben,wenn ich mit long double klar kommen würde, aber es geht teilweise einfach nicht. Interessant ist, dass ich festgestellt habe,dass die Fehler beim Addieren zu vernachlässigen sind,während beim Subtrahieren erschreckende Genauigkeitseinbußen zu entdecken sind. Weiß jemand wie das zusammenhängt? Intern wird doch alles addiert(halt mit verschiedenen Vorzeichen),dachte ich... Egal,wenn jemanden noch irgendwelche Hinweise einfallen,wie man solche Rundungsfehler durch geschickte Programmierung minimieren kann, wäre ich sehr dankbar.

    Gruss an Alle
    Sebastian



  • Was ist für dich eine erschreckende Genauigkeitseinbuße?
    Was für Algorithmen erfordern derartig hohe Genauigkeiten?
    Meines Wissens nach werden diese hohen Genauigkeiten hauptsächlich in der Zahlentheorie (Cryptografie) verwendet. Bei numerischen Simulationen genügt meistens die vorhandenen Genauigkeit. Geschwindigkeit ist hier sowieso meistens wichtiger.



  • Du meinst sicherlich Auslöschung.
    Um das zu vermeiden sollten die Beträge der Zahlen etwa in der gleichen Größenordnung liegen wie die gewünschte Genauigkeit.



  • @Braunstein

    Ich schreibe ein Programm,dass die Schwingungen von Feder-Masse-Systemen simuliert.
    Dabei wird über einen Zeitraum T zu jedem Zeitpunkt t+h (wobei h die Schrittweite ist) eine Differentialgleichung gebildet und nach dem Runge-Kutta Algorithmus numerisch gelöst.Dabei wird bei jedem Schritt durch eine Formel eine Fehlerabschätzung vollzogen und eventuell die Schrittweite h verdoppelt oder halbiert.Nerven tut mich dieser numerische Fehler halt bei der Fehlerabschätzung sowie aufgrund der Tatsache,dass ja mit jedem Schritt sich der Rundungsfehler fortpflanzt. Bei teilweise bis zu 20000 Schritten fällt es halt irgendwann ins Gewicht.
    Ach ja, und Rechenzeit spielt eine gehörige Rolle dabei...

    Gruß Sebastian



  • Bei derartigen Simulationen brauchst du solche Genauigkeiten nicht. Das Problem der Auslöschung besteht zwar, lässt sich aber meistens durch geschickte Umformung der Gleichungen lösen. Du kannst ja mal überprüfen wie groß der Fehelr wird und was das in realen Fällen ausmacht. Meist wird ein solcher Fehler überschätzt.


Anmelden zum Antworten