2012-12-07 10 views
13

Ich schreibe einen Ray Tracer und ein Teil des Prozesses feuert einen Strahl, der ein Objekt treffen oder nicht treffen kann (geometrisches Objekt). Eine Anzahl der Gleichungen, die Objekte beschreiben, geben NaN natürlich zurück, wenn keine Kreuzung stattgefunden hat (die Kreuzung ist imaginär), aber nicht alle der Objekte geben NaN zurück, wenn keine Kreuzung stattgefunden hat.Absichtlich zurück NaN

Ich weiß, dass ich Rückkehr sqrt (-1) erzwingen könnte, wenn keine Kreuzung passiert ist, aber ich frage mich, ob es eine Möglichkeit gibt, dies auf eine weniger teure Art und Weise zurückzugeben.

Antwort

13

Dies sollte funktionieren:

#include <limits> 

return std::numeric_limits<double>::quiet_NaN(); 
+0

Danke, dass funktioniert – asimes

+0

Ich denke, es dauerte eine Minute, bis der richtige Header nachschlagen. :) Ich werde das jetzt lassen, ich denke, es ist marginal besser als die angenommene Antwort. – unwind

12
return std::numeric_limits<double>::quiet_NaN(); 
+0

Danke, dass funktioniert – asimes

4

Ich weiß, es ist eine alte Frage, aber mit 11 C++ haben Sie die nan(const char*) Familie von Funktionen (nan für Doppelzimmer, nanl für lange Doppelzimmer und nanf für schwimmt). Das Argument ist implementierungsspezifisch, aber das Übergeben einer leeren Zeichenfolge (z. B. nan("")) gibt einen generischen NaN-Wert zurück.

+1

Hier ist ein Verweis auf die 'nan' Funktion: http://www.cplusplus.com/reference/cmath/nan-function/ – Carlton

Verwandte Themen