Seite 1 von 1
					
				NaN
				Verfasst: 27.07.2013 11:20
				von Klaus_1963
				PB 5.2 Beta 7 (64bit)
Folgender Code funktioniert so wie ich mir das vorstelle:
Code: Alles auswählen
r.f = 12.0
If IsNAN(r)
  Debug("r is not a number")
Else
  Debug("r is a number")
EndIf
Dieser dagegen nicht, obwohl er von meiner Logik her eigentlich funktionieren müsste:
Code: Alles auswählen
r.f = 12.0
If r = NaN()
  Debug("r is not a number")
Else
  Debug("r is a number")
EndIf
Warum liefern die beiden Codeschnipsel unterschiedlich Resultate?
 
			 
			
					
				Re: NaN
				Verfasst: 27.07.2013 11:30
				von CSHW89
				Eigentlich sind Vergleiche mit NaN nutzlos. Das ist jetzt nicht PB spezifisch, sondern in jeder Programmiersprache, die ich kenne. Aber in den meisten Sprachen kommt beim Vergleich mit NaN immer false raus, also auch bei einem Vergleich NaN = NaN, in PB anscheinend immer true. NaN ist halt einfach nicht definiert. Somit gibt es auch keine Ordnung oder Relation darauf. Ähnlich, wie mit Infinity, auch in der Mathematik: unendlich ist nicht gleich unendlich.
Du musst für solche Fälle also immer IsNaN benutzen.
lg Kevin
			 
			
					
				Re: NaN
				Verfasst: 27.07.2013 15:12
				von Klaus_1963
				@CSHW89:
In der Hilfe von PB steht zu NaN(): Returns the value representing NaN. The result is a float or double value depending on whether it is assigned to a float or double variable. 
Deshalb ging ich eigentlich davon aus, dass NaN() in PB einen definierten Wert besitzt...
Scheint nicht so zu sein, oder...
LG, Klaus
			 
			
					
				Re: NaN
				Verfasst: 29.07.2013 14:23
				von Nino
				Klaus_1963 hat geschrieben:Dieser dagegen nicht, obwohl er von meiner Logik her eigentlich funktionieren müsste:
Code: Alles auswählen
r.f = 12.0
If r = NaN()
  Debug("r is not a number")
  [...]
 
Nein, das funktioniert nicht.
Eben deswegen hat PB die Funktion 
IsNan() -- die ja überflüssig wäre, wenn ein Vergleich wie oben funktionieren würde.
Und 
NaN ist eben 
keine Zahl. Daher sollte es nicht allzu sehr verwundern, dass man damit nicht genauso wie mit einer Zahl umgehen kann.