Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fließkomma-Überlauf (https://www.delphipraxis.net/143775-fliesskomma-ueberlauf.html)

Neutral General 23. Nov 2009 12:20


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

himitsu 23. Nov 2009 12:38

Re: Fließkomma-Überlauf
 
Zitat:

Zitat von Neutral General
Hat jemand einen Tipp?

Wenn die verfügbaren Zahlensysteme nicht ausreichen:

- 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.)

Delphi-Laie 23. Nov 2009 12:39

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?!

Neutral General 23. Nov 2009 12:50

Re: Fließkomma-Überlauf
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Delphi-Laie
Riecht sehr nach einem Fraktalprogramm.

Hast eine gute Nase ;)

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)

ChrisE 23. Nov 2009 12:55

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

Medium 23. Nov 2009 13:30

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.

Neutral General 23. Nov 2009 13:37

Re: Fließkomma-Überlauf
 
Zitat:

Zitat von Medium
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 ;).

Das ist mir ja, wie oben schon erwähnt, auch eben eingefallen ;)

Zitat:

Zitat von Medium
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.

Ja das habe ich mir auch überlegt... Wie viele Nachkommastellen kann Extended? bzw. wie gut ist die Genauigkeit?

Medium 23. Nov 2009 13:38

Re: Fließkomma-Überlauf
 
Zitat:

Zitat von himitsu
nur die ersten 18-19 Stellen sind gültig

Auch nachzulesen in der OH :P

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.

Neutral General 23. Nov 2009 13:55

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 ;)

Medium 23. Nov 2009 14:11

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 08:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz