Pascal Anzahl der Vor- und Nachkommastellen in TurboPascal und/oder Windows 7

Schiffsfreak

Cadet 3rd Year
Registriert
Sep. 2016
Beiträge
41
Guten Tag,

ich aktualisiere meine seinerzeit unter TurboPascal 7 erstellten Fraktaldateien mittels Free Pascal für Windows7, und das klappt soweit ganz gut. Jetzt bin ich bei Ausschnittvergrößerungen (aus der Mandelbrotmenge) sowohl bei den Vorkomma- wie bei den Nachkommastellen an eine Grenze gestoßen: Bei knapp über 10 Exp18 bzw. 10 Exp -18 steigt das Programm aus. Am gewählten Zahlentyp liegt es nicht (Extended kann bzgl. der Exponenten ein Vielfaches). Ist das nun eine Grenze bei Pascal und/oder bei Windows 7? Mir fällt auf, dass z. B. Excel unter Windows 7 bereits ab 15 Stellen nur noch rundet, aber die Stellen nicht mehr schreibt. Gibt es eine Möglichkeit, diese Grenzen zu erweitern, wenn ja, wie?? Bei der Julia-Menge und Mandelbrot-Menge sind diese Grenzen schnell erreicht - schade, es entstehen auch darüber hinaus noch sehr schöne Graphen.
Danke schon mal für eine Antwort, vielleicht habe ich diesmal mehr Glück als beim letzten Mal.

Tschüss Schiffsfreak
 
Schiffsfreak schrieb:
Bei knapp über 10 Exp18 bzw. 10 Exp -18 steigt das Programm aus.
Was heißt das denn konkret?

Schiffsfreak schrieb:
Gibt es eine Möglichkeit, diese Grenzen zu erweitern, wenn ja, wie??
Du könntest einen eigenen Zahlentyp definieren, der dann die dementsprechende Genauigkeit mitbringt. Du musst halt nur die Operationen darauf selbst implementieren. Das wird dann mit Sicherheit auch nicht so performant wie jetzt.
 
Das ging ja schnell, danke!
Bei Zahlen, die größer als 1.000.000.000.000.000.000 sind, bricht TP7/FP das Programm ab. Bei Zahlen, die kleiner als 0,000.000.000.000.000.001 sind, werden weitere Nachkommaeingaben niedrigerer Zehnerpotenzen nicht mehr angezeigt. Auch werden im Ausgangsmenü auch dann, wenn ich eine Stellenzahl von z. B. 22 korrekt eingebe, nur 18 Vorkommastellen angezeigt zum Eintragen der entsprechenden Ziffern. Konkret steigt das Programm bei der Formel
x0:=Round(960-ax*xk) aus (x0 und ax hohe Extendedwerte, xk < 2 mit sehr vielen Kommastellen). Mit dieser Formel (und analog für y0) werden Punkte in den Koordinatenursprung geholt, die sonst bei höheren ax weit außerhalb des Monitors liegen würden (bei ax mit obigem Wert z. B. 0,1374 Lichtjahre ;-) ).
Wie gesagt, diese Grenzen sind bereits nach wenigen Vergrößerungen ausgewählter Bereiche erreicht. Aber trotz der Selbstähnlichkeit der Fraktale harren noch jede Menge unterschiedlichster Strukturen jenseits dieser Grenzen.

Definition eines eigenen Zahlentyps: Ich würde hier einen Zahlenwert analog Comp, also +/- ganzahlig definieren, mit z. B. 25 Stellen.
Für die xk-Werte wäre das ein Zahlentyp analog Extended, aber +/- mit nur einer Vorkommastelle, aber z. B. 25 Nachkommastellen.
Allerdings habe ich keine Ahnung, wie das geht (analog der Definition einer Function oder Procedure?) . Und dann bleibt immer noch die Frage, ob Windows 7 mitspielt (s. die Beschränkungen bei Excel!).
 
> Und dann bleibt immer noch die Frage, ob Windows 7 mitspielt (s. die Beschränkungen bei Excel!).
>
Wenn Du es selbst programmierst hast Du es doch in der Hand.
Außerdem liegen solche Sachen weniger am Betriebssystem, sondern allenfalls am Prozessor und welche Datentypen der anbietet. Und man benutzt halt gerne das, was die CPU anbietet, weil es eben besser "performt".

> Allerdings habe ich keine Ahnung, wie das geht (analog der Definition einer Function oder Procedure?)
>
Im trivialsten Fall denkt man sich aus, wie man die Zahl darstellt und macht dann ein Set an Funktionen, um Operationen auf diese Zahlen zu implementieren.

Möglicherweise gibts aber schon eine Bibliothek, die genau so etwas anbietet. Denn das ist nicht unbedingt einfach selbst zu machen.
Hier hat sich zum Beispiel mal jemand die Mühe gemacht das für Delphi im OOP-Stil zu implementieren. Lässt sich ggf. gut nach Free Pascal portieren:
http://delphiforfun.org/Programs/Library/BigFloat.htm
 
Wenn ich die bei Google gefundenen Hinweise richtig verstehe, handelt es sich wohl um eine Fehlermeldung der CPU. Bei Überschreitung der o. a. Grenzen wird das Programm mit SIGFPE beendet, was auf Division durch Null (entfällt), Gleitkommafehler (entfällt, ich habe x0 zwar als Ganzzahl definiert, sie ist aber bezüglich Größenordnung vom Typ Extended, und durch "Round" wird das Ergebnis der o. a. Formel zur Ganzzahl) oder Zahlenüberlauf hindeutet. Und der kann eigentlich nur CPU-seitig erfolgen, denn die Zahlentypen von TP7/FP lassen ja viel höhere Daten zu. Ich habe auch mal FP-eigene, bei TP7 nicht vorhandene Datentypen ausprobiert mit dem selben Ergebnis.
Ich werde mich also auf 10 E+/-18 beschränken.
Nochmal danke für Deine Hilfe!

Tschüss Schiffsfreak
 
Zurück
Oben