故意返回 NaN

Intentionally return NaN

提问人:asimes 提问时间:12/7/2012 更新时间:8/18/2020 访问量:19086

问:

我正在编写一个光线追踪器,该过程的一部分是发射可能会也可能不会击中物体(几何物体)的光线。如果没有发生交集(交集是虚构的),许多描述对象的方程会自然返回 NaN,但如果没有发生交集,并非所有对象都会返回 NaN。

我知道如果没有发生交叉点,我可以强制返回 sqrt(-1),但我想知道是否有办法以更便宜的方式返回它。

C++(英语:C++)

评论


答:

18赞 Henrik 12/7/2012 #1
return std::numeric_limits<double>::quiet_NaN();
32赞 unwind 12/7/2012 #2

这应该有效:

#include <limits>

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

评论

1赞 unwind 1/31/2017
我想我花了一分钟才找到正确的标题。:)我暂时不说这个,我认为它比公认的答案要好一点。
8赞 The_Rafi 8/14/2015 #3

我知道这是一个老问题,但是使用 C++11,您拥有一系列函数(用于双精度、长双精度和浮点数)。该参数是特定于实现的,但传递空字符串(例如 )将返回泛型 NaN 值。nan(const char*)nannanlnanfnan("")

评论

2赞 Carlton 4/8/2016
下面是对该函数的引用:cplusplus.com/reference/cmath/nan-functionnan
2赞 smartycope 8/18/2020 #4

中的宏也有效。NANmath.h

评论

3赞 HolyBlackCat 8/18/2020
可能应该使用而不是在 C++ 中。<cmath><math.h>