2012-12-07 11 views
13

Sto scrivendo un ray tracer e parte del processo sta sparando un raggio che può o meno colpire un oggetto (oggetto geometrico). Un certo numero di equazioni che descrivono oggetti restituiscono NaN in modo naturale se non si verifica alcuna intersezione (l'intersezione è immaginaria) ma non tutti gli oggetti restituiscono NaN se non si verifica alcuna intersezione.Restituire intenzionalmente NaN

So che potrei forzare il ritorno di sqrt (-1) se non si è verificato nessun incrocio, ma mi chiedevo se c'è un modo per restituirlo in un modo meno costoso.

risposta

13

Questo dovrebbe funzionare:

#include <limits> 

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

Grazie che funziona – asimes

+0

Immagino che mi ci sia voluto un minuto per cercare l'intestazione corretta. :) Lascerò questo per ora, penso che sia leggermente migliore della risposta accettata. – unwind

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

Grazie che funziona – asimes

4

So che è una vecchia questione, ma con C++ 11 si ha la nan(const char*) famiglia di funzioni (nan per i doppi, nanl per lunghi doppie e nanf per galleggianti). L'argomento è specifico dell'implementazione, ma il passaggio di una stringa vuota (ad esempio nan("")) restituisce un valore NaN generico.

+1

Ecco un riferimento alla funzione 'nan': http://www.cplusplus.com/reference/cmath/nan-function/ – Carlton