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

  • Testdatengeneratoren als Microservices mit Docker

    02.11.2019

    Ich habe die verschiedenen Testdatengeneratoren mittels Microservices über HTTP zugänglich gemacht, um sie unabhängig von der verwendeten Programmiersprache und/ oder Version (Java 11) verwenden zu können.

    Weiterlesen...

Neueste Artikel

  • Gif-Animationen in Java

    Nachdem ich neulich auf einen sehr interessanten Link gestoßen war, habe ich mich dafür interessiert, ob es möglich wäre - und falls ja: wie einfach - GIF-Animationen aus Java heraus zu erzeugen - und zwar mit Bordmitelln und ohne Zuhilfenahme externer Biblioheken

    Weiterlesen...
  • LinkCollections 2024 VIII

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

    Weiterlesen...
  • Generator für syntaktisch korrekten Python Code

    Nachdem es nun bereits seit einiger Zeit ein wenig stiller um meine diversen Generatoren für Testdaten geworden ist, habe ich über den Feiertag in Thüringen einen neuen begonnen.

    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.