有意地返回NaN

23

我正在编写一个光线追踪器,其中一部分是发射一条光线,这条光线可能会击中一个对象(几何对象)。描述对象的方程之一如果没有交点(交点为虚数)则自然地返回NaN,但并不是所有对象都在没有交点时返回NaN。

我知道如果没有交点可以强制返回sqrt(-1),但我想知道是否有一种更简单的方法来返回它。

4个回答

32

这应该可以工作:

#include <limits>

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

1
我想我花了一分钟查找正确的头文件。 :) 我现在会先离开这个问题,我认为这比被接受的答案稍微好一点。 - unwind

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

8

我知道这是一个老问题,但是在C++11中,您可以使用nan(const char*)函数族(nan用于双精度浮点数,nanl用于长双精度浮点数,nanf用于单精度浮点数)。参数是实现特定的,但是传递空字符串(例如nan(""))将返回一个通用NaN值。


2
这是关于 nan 函数的参考链接:http://www.cplusplus.com/reference/cmath/nan-function/ - Carlton

2
math.h 中的 NAN 宏也可用。

3
在C ++中,应该使用<cmath>而不是<math.h> - HolyBlackCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接