Я пишу трассировщик лучей, и часть процесса — запуск луча, который может или не может ударить объект (геометрический объект). Ряд уравнений, которые описывают объекты, возвращают NaN естественным образом, если пересечения не произошло (пересечение является воображаемым), но не все объекты возвращают NaN, если пересечения не произошло.
Я знаю, что мог бы принудительно вернуть sqrt (-1), если пересечение не произошло, но мне было интересно, есть ли способ вернуть это менее дорогим способом.
Это должно работать:
#include <limits>
return std::numeric_limits<double>::quiet_NaN();
return std::numeric_limits<double>::quiet_NaN();
Я знаю, что это старый вопрос, но с C ++ 11 у вас есть nan(const char*)
семейство функций (nan
для двоих, nanl
для длинных пар и nanf
для поплавков). Аргумент зависит от реализации, но передает пустую строку (например, nan("")
) возвращает общее значение NaN.