Autor Beitrag
specialist85
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 31.03.05 13:30 
Ich hab als 5.Prüfungsfach eine Präsentation in Informatik gewält und muss daher ein Programm schreiben, dass Funktionen untersucht.

Bevor ich anfange die Nullstellen einer Funktion duch Näherungsverfahren zu bestimmen, wollte ich erstmal eine kleine Procedure schreiben, die in einem bestimmten Bereich alle Funktionswerte berechnet und dann überprüft, welche = 0 sind.
Leider klappt die Addition von 2 Real-Variablen nicht so, wie ich mir das vorstelle.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var step,x:real;
begin
Step:=0.1;
x:=-1;
repeat
Memo1.Lines.Append(FloatToStr(x));
x:=x+step;
until x > 1;
end;


==>
-1
-0,9
-0,8
-0,7
-0,6
-0,5
-0,4
-0,3
-0,2
-0,1
-1,38777878078145E-16
0,0999999999999999
0,2
0,3
0,4
0,5
0,6
0,7
0,8
0,9
1

Wenn ich den Variablen-Typ auf extended ändere, stimmen alle Werte, bis auf den Wert, bei dem durch die Addition 0 entstünde.

Kann mir vielleicht jemand weiterhelfen?

Wäre super.

Moderiert von user profile iconAXMD: Delphi-Tags hinzugefügt.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 31.03.05 13:35 
:welcome:

Real-Variablen darfst du prinzipiell nicht direkt vergleichen. Da die CPU (auch die FPU) nur eine eingeschränkte Rechengenauigkeit hat kann es vorkommen, dass hinter der (in deinem Beispiel) sechzehnten Nachkommastelle Fehler auftreten. Daher den Wert, den du vergleichen willst, einfach auf 10 Stellen runden, dann sollte es funktionieren (siehe dazu RoundTo in der Delphihilfe; dort steht auch, wieviele Stellen Real noch genau ist).

AXMD
specialist85 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 31.03.05 14:13 
Danke schon mal.

Ich hab auch grad gemerkt, dass ich für die Nullstellen eh auf lange Sicht eine mathematische Aproximation machen muss. (je nach dem wie klein ich den Schritt wähle, dauert das dann auch bei einer etwas längeren Ganzrationalen Funktion auch etwas länger)

also doch ein mathematisches Näherungsverfahren :(
fvolk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 203

Win XP (Home & Pro)
Delphi 2005 Pers
BeitragVerfasst: Do 31.03.05 14:26 
Hoch lebe das Newton-Verfahren! :wink:

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)