NaN

Anfängerfragen zum Programmieren mit PureBasic.
Klaus_1963
Beiträge: 96
Registriert: 25.06.2009 09:09

NaN

Beitrag 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?
PureBasic 5.72 LTS / Windows / MacOS / Linux Mint / starker Kaffee / noch stärkerer Kaffee / reines Koffein intravenös...
Motto: Hauptsache es funktioniert - aber schnell und richtig!
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: NaN

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Klaus_1963
Beiträge: 96
Registriert: 25.06.2009 09:09

Re: NaN

Beitrag 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
PureBasic 5.72 LTS / Windows / MacOS / Linux Mint / starker Kaffee / noch stärkerer Kaffee / reines Koffein intravenös...
Motto: Hauptsache es funktioniert - aber schnell und richtig!
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: NaN

Beitrag 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.
Antworten