Mathematik mit beliebiger Präzision in Java

vorhergehende Artikel in: Numerik
11.11.2018

Wann immer ich hier über Experimente mit numerischen Lösungsverfahren für Differentialgleichungssysteme berichte, habe ich im Hinterkopf, dass diese Verfahren eigentlich völlig ungeeignet dafür sind, solche Systeme zu analysieren, da heutige Digitalcomputer bereits rationale Zahlen nicht exakt darstellen können - von irrationalen ganz zu schweigen...

Daher ist es so, dass jede Berechnung, die mit einem solchen Digitalcomputer ausgeführt wird, einen Fehler beinhaltet. Ich habe hier bereits über einen anderen interessanten Fakt beim Betreiben von Berechnungen mit gebrochenen Zahlen berichtet. Diese Fehler - wenn sie auch winzig und vernachlässigbar erscheinen - können für numerische Verfahren zur Lösung von Differentialgleichungsverfahren zu einem großen Problem werden - denn man berechnet ja jedes nächste ergebnis aus den vorangegangenen, bereits mit Fehlern behafteten, wodurch die Fehler - abhängig von der konkreten Aufgabe sehr schnell wachsen können. (Daher sollte man auch genau überlegen, ob man den hier vorgeschlagenen Performanzschub wirklich benötigt...)

Das ist auch einer der Gründe, warum heute noch manche Leute Analogrechner bauen - damit hat man dieses Problem schlicht und einfach nicht. Man bekommt natürlich andere - wie etwa die Unmöglichkeit, die Dimensionierung der Bauelemente beliebig genau prüfen zu können - außerdem spielt in Analogrechnern die Temperatur eine weit größere Rolle als in herkömmlichen Digitalrechnern - sie beeinflusst direkt die Ergebnisse - speziell wenn wir davon reden, besonders genau rechnen zu wollen.

Man könnte jetzt versucht sein zu sagen: "Hey, dann lasst uns doch einfach mit BigDecimal rechnen!". Und dann stellt man verblüfft fest - damit kann man nicht rechnen! Ich weiß nicht, warum Sun (Jaja - ich weiß, dass es schon lange her ist, dass Oracle Java gekauft hat!) sich damals entschieden hat, eine solche Klasse zu schaffen und zur Verfügung zu stellen, wenn man dann damit nichts tun kann. Naja - nichts bis auf die Grundrechenarten.

Allerdings findet man im Netz hin und wieder Ressourcen, die behaupten, diese Lücke zu füllen. Ein Hoch auf die Open Source Bewegung!! Allerdings ist mir bei weiteren Recherchen aufgefallen, dass solche Bibliotheken ja besonders streng getestet werden müssten - was nutzt es mir schließlich, wenn ich besonders genau rechnen kann und mein Ergebnis 200 Stellen nach dem Komma hat, aber der Algorithmus der Berechnung fehlerhaft implementiert wurde? Die verlinkte Bibliothek hat sehr viele Tests an Bord - aber man könnte hier natürlich wieder den Aluhut aufsetzen und fragen: Die erwarteten Testresultate stammen von Wolfram Alpha - wie sicher ist es, dass dieses System richtig rechnet? Und die Tests werden alle für nur eine feste Anzahl Nachkommastellen durchgeführt - und für einen Rundungsalgorithmus. Wie sicher ist es, dass damit der Algorithmus auch für andere Kombinationen aus Nachkommastellenanzahl und Rundungsalgorithmus korrekte ergebnisse liefert?

Mit diesen Fragen beende ich den heutigen Beitrag - ich werde wohl erst noch ein paar Mal darüber schlafen müssen, bevor ich die Energie aufwende, mein Framework für die numerische Behandlung von Differentialgleichungssystemen auf die Option der Benutzung von BigDecimal als unterliegenden Datentyp zu erweitern.

Artikel, die hierher verlinken

Trajektorien in Vektorfeldern

28.04.2022

Manchmal dauert es ein wenig länger von der Inspiration bis zur Umsetzung

Strange Attractors mit BigDecimal

26.02.2020

Nachdem ich mir in meinem früheren Artikel zum Thema der Mathematik mit beliebiger Präzision in Java noch nicht sicher war ob es Sinn machen würde, mein Framework für die numerische Behandlung von Differentialgleichungssystemen auf die Option der Benutzung von BigDecimal als unterliegenden Datentyp zu erweitern, habe ich nun doch damit experimentiert:

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Aviator + Websockets

    15.06.2019

    Nachdem ich in den letzten Wochen und Monaten meine Zeit und Energie in die sQLshell gesteckt habe - was sowohl Bugfixing als auch neue Features betraf - habe ich nun endlich die Zeit gefunden, ein bereits lange überfälliges Feature an dWb+ und speziell am aviator zu implementieren.

    Weiterlesen...

Neueste Artikel

  • Neue Version plantumlinterfaceproxy napkin look

    Es gibt eine neue Version des Projektes plantumlinterfaceproxy - Codename napkin look.

    Weiterlesen...
  • Apache HTTPCore5 funktioniert nicht mit Docker

    Ich habe neulich drei Stunden meines Lebens verschwendet weil ich unbedingt die neueste Version der HTTPCore5 Library von Apache einsetzen wollte.

    Weiterlesen...
  • Entwurfsmodus für beliebige SVG Graphiken

    Nachdem ich in der Vergangenheit immer wieder Weiterentwicklungen der Idee vorgestellt habe, Graphiken mit dem Computer so zu ezeugen dass sie eine gewisse "handgemachte" Anmutung haben, habe ich nunmehr die durchschlagende Idee gehabt:

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.