Ist das richtig so und warum?
Code: Alles auswählen
Define.d Number = NaN(), Number1 = 1.2
If Number = Number1
Debug "Number = " + StrD(Number1)
EndIf
Debug Number
Code: Alles auswählen
Define.d Number = NaN(), Number1 = 1.2
If Number = Number1
Debug "Number = " + StrD(Number1)
EndIf
Debug Number
Und dazu steht da noch folgendes:Gibt den speziellen Fließkommawert zurück, welcher 'Not a Number' (keine Zahl) repräsentiert. Dieser Wert wird von ungültigen Berechnungen zurückgegeben, wie z.B. Berechnung der Quadratwurzel von einer negativen Zahl.
Ich sehe den Bug nicht so richtig. Um auf NaN zu prüfen, gibt es eine spezielle Prozedur, die wahrscheinlich genau deswegen eingeführt wurde, weil ein normaler Vergleich auf Bedingung zwangsläufig immer auf #True hinausläft.NaN ist ein spezieller Wert. Die Verwendung von NaN in jeglichen Berechnungen mit anderen Werten wird wiederrum den Wert NaN zurückgeben. Die IsNaN() Funktion kann verwendet werden, um zu überprüfen, ob eine Variable den Wert NaN repräsentiert.
Es gibt einen Standard, der beschreibt welche Auswirkungen NaN hat und der wurde nicht eingehalten. Eigentlich müsste der Vergleich immer false sein, nicht true.TroaX hat geschrieben: ↑08.02.2024 09:58 Ich sehe den Bug nicht so richtig. Um auf NaN zu prüfen, gibt es eine spezielle Prozedur, die wahrscheinlich genau deswegen eingeführt wurde, weil ein normaler Vergleich auf Bedingung zwangsläufig immer auf #True hinausläft.
Das mag etwas verwirrend sein. Aber wie man NaN richtig prüft steht ja in der Prozeduren-Beschreibung von NaN()
Es stimmt, dass es die Funktion IsNaN() gibt, um eine Fließkommazahl dahingehend zu prüfen.TroaX hat geschrieben: ↑08.02.2024 09:58 Ich sehe den Bug nicht so richtig. Um auf NaN zu prüfen, gibt es eine spezielle Prozedur, die wahrscheinlich genau deswegen eingeführt wurde, weil ein normaler Vergleich auf Bedingung zwangsläufig immer auf #True hinausläft.
Das mag etwas verwirrend sein. Aber wie man NaN richtig prüft steht ja in der Prozeduren-Beschreibung von NaN()
Code: Alles auswählen
Define.d Number1 = NaN()
Define.d Number2 = 3.14
If Number1 > Number2
Debug StrD(Number1) + " > " + StrD(Number2)
EndIf
If Number1 < Number2
Debug StrD(Number1) + " < " + StrD(Number2)
EndIf
If Number1 = Number2
Debug StrD(Number1) + " = " + StrD(Number2)
EndIf
ASM hat geschrieben:NaN > 3.14
NaN = 3.14
C hat geschrieben:
Code: Alles auswählen
Define.d Number, Number2 = 1.2
; ASM OK, C-Backend Bug ?
Number = Sqr(-1)
If Number = NaN()
Debug "If / Ok: Number = NaN()"
Else
Debug "Else / Bug: Number = NaN()"
EndIf
; ASM OK, C-backend Ok
Number = Sqr(-1)
If IsNAN(Number)
Debug "If / Ok: IsNaN(Number)"
Else
Debug "Else / Bug: IsNaN(Number)"
EndIf
; ASM Bug, C-Backend Bug
Number2 = 1.2
If Number = Number2
Debug "If / Bug: Number = Number2"
Else
Debug "Else / Ok: Number = Number2"
EndIf