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