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.