Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Probleme mit Extended


Feivel1234 - Do 02.02.06 15:36
Titel: Probleme mit Extended
Hallo,

ich habe heute angefangen ein Programm zu schreiben, dass eine beliebige Funktion als Graphen darstellt! Bevor der Graph gezeichnet wird sollenn, die x un y Werte zunächst in zweo unterschiedliche Memofelder geschrieben werden!
Ich klapper also alle x-Werte in 0.1 Schritten ab und berechne den y-Wert!
Nur leider habe ich das Problem! Wenn x bei 0.0 angekommen ist erhält x den Wert 2,84603070277445E-19 und nicht 0!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Repeat
  y := sin(x);
  mem_xwerte.lines.add(FloatToStr(x));
  mem_ywerte.lines.add(FloatToStr(y));
  x := x + 0.1;
Until x >= 2.0;


Danke schonmal im vorraus...
Simon

Moderiert von user profile iconGausi: List- durch Delphi-Tags ersetzt


Delete - Do 02.02.06 15:45

Rechenungenauigkeit bei Fließkommazahlen.


Gausi - Do 02.02.06 15:45

Hallo,

2,84603070277445E-19, das ist dasselbe wie 0.00000000000000000084603070277445 - das ist so gut wie Null. Die Float-Datentypen haben generell den Nachteil, dass sie fast nie genau sind. Das hängt einerseits mit der begrenzten Speicherkapazität zusammen, andererseits auch mit der Darstellung im Binärsystem. Versuch z.B. mal die Zahl 0.1 exakt im Binärsystem darzustellen - du wirst scheitern. Deshalb sollte man auch Float-Typen nie mit "=" vergleichen.

Für die Amzeige solltest du dir mal  FormatFloat anschauen.