Hallo Forum,
da ich momentan keinen Funktionenparser zur Verfügung habe (ich aber versuchen möchte Funktionen zu zeichnen) rechne ich einzelne Punkte des Graphen aus und Zeichne eine Kurve durch DrawCurve(). Das funktioniert bei quadratischen Funktionen o.ä sehr gut, allerdings steigen die Werte bei Exponentioalfunktionen so schnell und stark, dass ich einen Overflow-Execption kriege (nicht bei der Rechnung selbst, sondern wenn ich Zeichne!). Das verwirrt mich deshalb, da ich vorher überprüfe ob der y-Wert größer/kleiner ist als float.Min/MaxValue. Wie kann es zu einem OverFlowExecption kommen, wenn ich zu große Elemente gar nicht im Array aufnehme?
LG
da ich momentan keinen Funktionenparser zur Verfügung habe (ich aber versuchen möchte Funktionen zu zeichnen) rechne ich einzelne Punkte des Graphen aus und Zeichne eine Kurve durch DrawCurve(). Das funktioniert bei quadratischen Funktionen o.ä sehr gut, allerdings steigen die Werte bei Exponentioalfunktionen so schnell und stark, dass ich einen Overflow-Execption kriege (nicht bei der Rechnung selbst, sondern wenn ich Zeichne!). Das verwirrt mich deshalb, da ich vorher überprüfe ob der y-Wert größer/kleiner ist als float.Min/MaxValue. Wie kann es zu einem OverFlowExecption kommen, wenn ich zu große Elemente gar nicht im Array aufnehme?
C#-Quellcode
- public void ExponentialFunction(double a, double b)
- {
- Graphics device = Graphics.FromImage(BMP);
- List<PointF> points = new List<PointF>();
- Pen pen = new Pen(Brushes.Black, 1.5f);
- float x = (SurfaceSize.Width) / 2; //Der Punkt aus den Variablen x und y (x|y) entspricht meinem Urspung.
- float y = (SurfaceSize.Height) / 2;
- for (float i = -StartEndX; i < StartEndX; i += 0.1f) //StartEndX gibt an bei welchem X-Wert ich anfange zu zeichnen, und bei welchem ich aufhöre und entspricht der Breit meiner Form durch die Skala die ich verwende
- {
- if(((float)(-a * Scala * Math.Pow(b, i) + y) > float.MinValue) && ((float)(-a * Scala * Math.Pow(b, i) + y) < float.MaxValue))
- points.Add(new PointF(i * Scala + x, (float)(-a * Scala * Math.Pow(b, i) + y))); //Punkte werden nur hinzugefügt, wenn es keinen Overflow gibt
- }
- device.DrawCurve(pen, points.ToArray()); //Overflowexecption?!?
- }
LG