Hallo zusammen,
habe mich ein wenig in Script versucht. Einiges funktioniert schon aber hier komme ich nicht weiter:
real a_temp = dom.GetObject("BidCos-RF.LEQ0993473:1.TEMPERATURE");
real temp = a_temp.Value();
real a_soll = dom.GetObject("BidCos-RF.LEQ0993473:2.SET_TEMPERATURE");
real soll = a_soll.Value();
real diff = dom.GetObject("DiffSollIstTemp");
WriteLine(diff.Value());
WriteLine(soll-temp);
if (diff.Value() == soll-temp)
{
WriteLine(" gleich");
}
else
{
WriteLine("nicht gleich");
}
Ergebnis der Ausgabe ist
0.200000
0.200000
nicht gleich
Der IF Vergleich läuft immer in den NEIN Zweig obwohl die Werte gleich sind.Was mach ich falsch?
Vielen Dank schon mal für euere Hilfe
Klaus
IF Abfrage funktioniert nicht
Moderator: Co-Administratoren
Re: IF Abfrage funktioniert nicht
Real-Werte kann man nicht direkt vergleichen, wenn man vorher mit ihnen gerechnet hat, da es betriebssytem-ahängige Differenzen im nichtsichtbaren Nachkommastellenbereich gibt.
Mach aus
einfach
.
Mach aus
Code: Alles auswählen
if (diff.Value() == soll-temp)
Code: Alles auswählen
if ( (diff.Value()).ToString(6) == (soll-temp).ToString(6) )
.
Re: IF Abfrage funktioniert nicht
Vielen Dank, hat funktioniert.
Aber schon merkwürdig, dieses Verhalten. Hab extra REAL genommen um nicht unterschiedliche Typen zu vergleichen, da es dann erfahrungsgemäß zu Problemen kommt. VAR funktioniert ja auch nicht.
Ich muss schon sagen, sehr eigenartig die Entwicklung mit script.
vg Klaus
Aber schon merkwürdig, dieses Verhalten. Hab extra REAL genommen um nicht unterschiedliche Typen zu vergleichen, da es dann erfahrungsgemäß zu Problemen kommt. VAR funktioniert ja auch nicht.
Ich muss schon sagen, sehr eigenartig die Entwicklung mit script.
vg Klaus
BadenPower hat geschrieben:Real-Werte kann man nicht direkt vergleichen, wenn man vorher mit ihnen gerechnet hat, da es betriebssytem-ahängige Differenzen im nichtsichtbaren Nachkommastellenbereich gibt.
Mach auseinfachCode: Alles auswählen
if (diff.Value() == soll-temp)
Code: Alles auswählen
if ( (diff.Value()).ToString(6) == (soll-temp).ToString(6) )
.
Re: IF Abfrage funktioniert nicht
Nein, gar nicht. Das ist das normale, übliche Verhalten von Fliesskommadarstellungen am Rechner. Vergleiche auf Gleichheit sind mehr oder weniger sinnlos. Was geht sind Vergleiche auf größer/kleiner. Wenn Du sowas wie Gleichheit brauchst, dann solltest Du die Differenz bilden und feststellen ob sich deren Absolutbetrag unterhalb eines von Dir definierten Deltas befindet. Also in Pseudo-Code:lundm2406 hat geschrieben:Vielen Dank, hat funktioniert.
Aber schon merkwürdig, dieses Verhalten.
Code: Alles auswählen
float w1;
float w2;
float delta = 0.001;
if( fabs(w1-w2) < delta )
{
println("gleich")
}