Намеренно вернуть NaN

Я пишу трассировщик лучей, и часть процесса — запуск луча, который может или не может ударить объект (геометрический объект). Ряд уравнений, которые описывают объекты, возвращают NaN естественным образом, если пересечения не произошло (пересечение является воображаемым), но не все объекты возвращают NaN, если пересечения не произошло.

Я знаю, что мог бы принудительно вернуть sqrt (-1), если пересечение не произошло, но мне было интересно, есть ли способ вернуть это менее дорогим способом.

15

Решение

Это должно работать:

#include <limits>

return std::numeric_limits<double>::quiet_NaN();
20

Другие решения

return std::numeric_limits<double>::quiet_NaN();
17

Я знаю, что это старый вопрос, но с C ++ 11 у вас есть nan(const char*) семейство функций (nan для двоих, nanl для длинных пар и nanf для поплавков). Аргумент зависит от реализации, но передает пустую строку (например, nan("")) возвращает общее значение NaN.

6
По вопросам рекламы [email protected]