![]() |
Fließkomma-Überlauf
Hi,
Ich berechne gerade etwas, im wahrsten Sinne des Wortes, "größeres". Dabei wird eine Zahl in jeder Iteration quadriert. Das funktioniert bisher 12 Iterationen lang, bis ich nen Gleitkomma-Überlauf bekomme. Allerdings wäre es notwendig bis zu 20 Iterationen hinzubekommen. Ich verwende schon den Datentyp Extended. Hat jemand einen Tipp? Gruß Neutral General |
Re: Fließkomma-Überlauf
Zitat:
- Werte so scalieren, daß sie reinpassen (PS: Extendet kann zwar theoretisch Zahlen mit ~300 Stellen vorm Komma berechnen, aber nur die ersten 18-19 Stellen sind gültig ... der Rest ist undefiniert) - oder ein anderes Zahlensystem verwenden (BigInt und Co.) |
Re: Fließkomma-Überlauf
Riecht sehr nach einem Fraktalprogramm.
Sowohl die Mathematik als auch die vorgegebenen Grenzen des Datentypes Extended kannst Du nicht überlisten. Entweder, die Ausgangszahl passend begrenzen (so daß auch bis zu 20 Quadrierungen nicht überlaufen) oder vor jeder Quadrierung prüfen, ob die Basis die Größe der Quadrdatwurzel der größten darstellbaren Extendedzahl erreicht oder gar überschritten hat. Alternativ könnte (?) auch die Konstruktion try-except-finally einen Überlauf abfangen?! |
Re: Fließkomma-Überlauf
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Naja ich hab das Problem mit etwas Logik in den Griff bekommen :mrgreen: Ich muss ja die Zahlen, die schon aus der Mandelbrotmenge rausgeflogen sind nicht weiter quadrieren. Spart Rechenzeit und verhindert Überläufe :stupid: (Sieht übrigens schon ganz nett aus - siehe Anhang) |
Re: Fließkomma-Überlauf
Hallo NeutralGeneral,
wie wäre eine getrennte Betrachtung von Exponent und Mantisse. Da du bei jeder Iteration eine quadrierung durchführst, weißt du ja das der Exponent sich quasi verdoppel (10^2 -> 10^4 -> 10^8). Ergo bräuchtest du "nur" am Anfang deiner Iteration die Zahl in Exponent und Mantisse zerlegen und die Ergebnisse einzeln berechnen -> Mantisse Quadrieren und Exponent *2. Aus der Ergebnis-Mantisse wieder eine Mantisse und Exponentenzerlegung und den ErgebnisExponenten mit dem anderen Exponenten verheiraten. :drunken: Soweit die Theorie :mrgreen: Ich hoffe, das kann dir Helfen. Greez, Chris |
Re: Fließkomma-Überlauf
Beim ganz normalen Mandelbrot Fraktal kannst du einen Wert wegschmeissen sobald er bei einem Iterationsschritt die Länge 2 hat - dieser wird nie konvergieren/orbiten, sondern immer flüchten. Damit solltest du nie Komponenten >2 bekommen, und bist mit Extended mehr als gut bedient ;).
Was anderes ist es dann wenn du sehr weit rein zoomst. Dann erkennt man ab irgendwann dass mehrere Pixel auf den selben Wert gemapped werden, da die Präzision nicht mehr reicht. Ab dann hilft echt nur noch die Verwendung einer Großzahl-Unit, da skalierte Werte sich ja nicht mehr korrekt verhalten würden. |
Re: Fließkomma-Überlauf
Zitat:
Zitat:
|
Re: Fließkomma-Überlauf
Zitat:
Edit: Das heisst, dass du ab ca. 1.000.000.000.000.000.000-fachem Zoom Klötzchen zu sehen bekommst (hab ich mit meinem Mandelbrot-Rumspiel-Test-Prog auch schon mal gesehen). Klingt erstmal nach "da kommt ja nie einer hin", aber gerade die tiefen Zooms sind ja erst der interessante Teil! :) Edit2: Eventuell auch schon etwas eher, da die Iterationen ja dann auch langsam ungenau werden. Schwer das genau anzugeben. |
Re: Fließkomma-Überlauf
Ja gut..
Ich machs ja nur mal aus Spaß/Interesse. Der Zoom reicht mir fürs erste. Notfalls kann ich immernoch umsteigen ;) |
Re: Fließkomma-Überlauf
Die Mühe hab ich mir auch nicht mehr gemacht :) So ein Mandelbrötchen gehört ja irgendwie zu den Dingen, die jeder Programmierer mal in seinem Leben gebaut haben sollte - wie Hallo Welt, nur ein paar Jahre später. Hab damals auch nur meiner "Pflicht" genüge getan :stupid:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz