Подтвердить что ты не робот

Преднамеренно возвратите NaN

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

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

4b9b3361

Ответ 1

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

#include <limits>

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

Ответ 2

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

Ответ 3

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