Hallo,
ich bin gerade dabei, einen funktionenplotter für meine facharbeit zu entwickeln (Die Ausgabe ist bereits komplett fertig). Dabei ist die Anzeige frei skalierbar, d.h. jeder Funktionswert wird durch eine Skalierungskonstante dividiert, wenn die Funktion angezeigt werden soll.
(Bsp. Skalierungskonstante = 0,01 -> Ein Pixel = 0,01 ; Wert vorher: 10,12 => Wert nachher: 1012 => dem Wert wird der Integerwert 1012 zugewiesen)
So, jetzt hab ich aber das Problem, dass ich dauernd mit Double-Werten rechne und sie erst am ende der Werte-Transformation in Integer-Werte umrechne, um sie dann als Pixelwerte behandeln zu können. Allerdings bekomme ich z.b. für die funktion f(x)=x² irgendwann so große werte, dass ich bei der Zuweisung NeuerWert = Round(AlterWerte / Skalierung) einen overflow erhalte - klar. Jetzt wollte ich diesen Overflow abfangen:
NeuerWert := Round(EnsureRange(AlterWert / Skalierung, Low(Integer), High(Integer));
(EnsureRange ist eine Funktion aus der
Unit Math, siehe
OH)
Allerdings erhalte ich ab einem bestimmten Punkt einen Bluescreen mit der Meldung, dass ein Fehler in der
win32.dll (oder exe, bin mir grad nicht sicher) aufgetreten ist.
Wie kann ich diesen Fehler umgehen?
mfg,
heiopei
Edit:
hHab jetzt nochmal die etwas genauere Beschreibung des Bluescreens
PAGE_FAULT_IN_NONPAGED_AREA
win32k.sys - Address BF87920A base at BF800000, DateStamp 41107f7a
tech. Info: STOP: 0x00000050 (0xEE3F2060, 0x00000001, 0xBF87920A, 0x000000000)