Autor Beitrag
Feivel1234
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 02.02.06 15:36 
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!

ausblenden 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.02.06 15:45 
Rechenungenauigkeit bei Fließkommazahlen.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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.

_________________
We are, we were and will not be.