2012-12-07 12 views
13

Piszę ray tracer, a część procesu wystrzeliwuje promień, który może, ale nie musi, uderzyć w obiekt (obiekt geometryczny). Liczba równań, które opisują obiekty, w naturalny sposób powraca NaN, jeśli nie ma skrzyżowania (przecięcie jest wyimaginowane), ale nie wszystkie obiekty zwracają NaN, jeśli nie ma miejsca przecięcia.Celowo zwracam NaN

Wiem, że mógłbym zmusić powracający sqrt (-1), gdyby nie doszło do skrzyżowania, ale zastanawiałem się, czy istnieje sposób na zwrócenie tego w mniej kosztowny sposób.

Odpowiedz

13

To powinno działać:

#include <limits> 

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

Dziękuję, że działa – asimes

+0

Myślę, że zajęło mi minutę, aby wyszukać odpowiedni nagłówek. :) Zostawię to na razie, myślę, że jest nieznacznie lepszy niż zaakceptowana odpowiedź. – unwind

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

Dziękuję, że działa – asimes

4

Wiem, że to stare pytanie, ale z C++ 11 masz rodzinę funkcji (nan dla dwójki, nanl dla długich deblu i nanf dla nan(const char*) pływa). Argument jest zależny od implementacji, ale podanie pustego ciągu (np. nan("")) zwraca ogólną wartość NaN.

+1

Oto odniesienie do funkcji 'nan': http://www.cplusplus.com/reference/cmath/nan-function/ – Carlton