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

  • Certstream, InfluxDB, Grafana und Netflix

    16.04.2019

    Nachdem ich vor kurzem über mein erstes Spielen mit dem certstream berichtete, habe ich weitere Experimente gemacht und die Daten zur besseren Auswertung in eine InfluxDB gepackt, um sie mit Grafana untersuchen zu können.

    Weiterlesen...

Neueste Artikel

  • Die sQLshell ist nun cloudnative!

    Die sQLshell hat eine weitere Integration erfahren - obwohl ich eigentlich selber nicht viel dazu tun musste: Es existiert ein Projekt/Produkt namens steampipe, dessen Slogan ist select * from cloud; - Im Prinzip eine Wrapperschicht um diverse (laut Eigenwerbung mehr als 140) (cloud) data sources.

    Weiterlesen...
  • LinkCollections 2024 III

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2024 folgt hier gleich die nächste:

    Weiterlesen...
  • Funktionen mit mehreren Rückgabewerten in Java

    Da ich seit nunmehr einem Jahr bei meinem neeun Arbeitgeber beschäftigt und damit seit ungefähr derselben Zeit für Geld mit Python arbeite, haben sich gewisse Antipathien gegenüber Python vertieft (ich kann mit typlosen Sprachen einfach nicht umgehen) - aber auch einige meiner Gründe, Python zu lieben sind ebenso stärker geworden. Einer davon ist der Fakt, dass eine Methode in Python mehr als einen Wert zurückgeben kann.

    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.