Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "-NAN"? Variablenzuweisung funktioniert nicht?! (https://www.delphipraxis.net/136478-nan-variablenzuweisung-funktioniert-nicht.html)

Sven M. 1. Jul 2009 11:43


"-NAN"? Variablenzuweisung funktioniert nicht?!
 
Hallo zusammen,
entweder steh' ich gerade auf dem Schlauch oder Delphi spinnt. Wahrscheinlich ist ersteres der Fall...:D

Ich habe folgende Funktion:
Delphi-Quellcode:
function FindNextPoint(Graph: TLineSeries): integer;
var i: integer;
    XValue, YValue: double;

    t1, t2: double; //Debugging-Zwecke
begin
  i:=0;
  Graph.GetCursorValues(XValue, YValue);

  ShowMessage(FloatToStr(Graph.XValue[i]));//korrekte Anzeige "-100"
  t1:=Graph.XValue[i];//-NAN
  t2:=abs(Graph.XValue[i+1]);//sinnlose Potenz

  while (i<Graph.Count-1) and
    (abs(Graph.XValue[i]-XValue) > abs(Graph.XValue[i+1])-XValue) do
  begin
    inc(i);
  end;
  result:=i;
end;
Diese soll mir den am nächsten am Cursor gelegenen Punkt einer TLineSeries zurückgeben.
Problem ist folgendes: Für positive X-Werte funktioniert das alles ganz gut. Bei Rückgabewerten, die eigentlich negativ sein müssten, liefert das Ding jedoch immer nur 0.
Will ich mir die Werte von t1 und t2 im Debugger anschauen, wird mir für t1 "-NAN" und für t2 ein völlig sinnloser Wert (*10^-25 o.ä.) angezeigt. Dazu muss ich sagen, dass die betreffende Series eine quadratische Funktion ist mit einem Definitionsbereich -100...100. D.h. Graph.XValue[0] müsste also -100 ergeben, was in der ShowMessage ja auch korrekt getan wird.

Habt ihr irgendeine Idee, woran das liegen könnte und wie ich mein Problem beheben kann?

Besten Dank,
Sven

himitsu 1. Jul 2009 11:52

Re: "-NAN"? Variablenzuweisung funktioniert nicht?
 
Wie/wo zeigt der Debugger diese "komischen" Werte an?

Und ist das der komplette Code?

Wird t1 und t2 wirklich nicht mehr irgendwo verwendet?
Wenn nein, dann mach mal was ganz "Sinnloses" und verwende t1 und t2 mal,
denn sonst werden diese Variablen vom Compiler weroptimiert und der Inhalt ist nicht wirklich verfügbar ;)
Delphi-Quellcode:
**result:=i;
  if t1 = t2 then ;
end;

Sven M. 1. Jul 2009 12:00

Re: "-NAN"? Variablenzuweisung funktioniert nicht?
 
Danke für deine Antwort himitsu. Zumindest kann ich nun den Wert der Variablen auslesen - scheinen tatsächlich wegoptimiert worden zu sein...
t1 und t2 wurden nämlich auch nirgendwo anders verwendet.

Die Funktion macht zwar immer noch nicht, was ich will (bzgl. negative X-Werte), aber das bekomme ich auch noch hin...:)
(Wenn jemand dahingehend noch Hinweise hat, her damit!:D)


Danke himitsu!

Namenloser 1. Jul 2009 12:02

Re: "-NAN"? Variablenzuweisung funktioniert nicht?
 
Zitat:

Zitat von himitsu
Wird t1 und t2 wirklich nicht mehr irgendwo verwendet?
Wenn nein, dann mach mal was ganz "Sinnloses" und verwende t1 und t2 mal,
denn sonst werden diese Variablen vom Compiler weroptimiert und der Inhalt ist nicht wirklich verfügbar ;)

Oder in den Compileroptionen (oder per Compilerschalter) die Optimierung ausschalten.

jaenicke 1. Jul 2009 12:07

Re: "-NAN"? Variablenzuweisung funktioniert nicht?
 
Setze doch einfach einen Haltepunkt, markiere so etwas wie Graph.XValue[i] und drücke Strg + F7. Dann siehst du den Wert. Du kannst auch mit rechts draufklicken und unter Debug auf Auswerten.
Dann kannst du den Wert auch überwachen lassen und schrittweise durch den Quelltext gehen. Links siehst du dann die Liste der überwachten Ausdrücke. So kannst du relativ einfach sehen was passiert.

(Bei D7 und früher geht es ähnlich, nur etwas unübersichtlicher.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz