故意返回 NaN
Posted
技术标签:
【中文标题】故意返回 NaN【英文标题】:Intentionally return NaN 【发布时间】:2012-11-25 10:25:28 【问题描述】:我正在编写光线追踪器,其中一部分过程正在发射可能会或可能不会击中对象(几何对象)的光线。如果没有发生交集(交集是虚构的),许多描述对象的方程自然返回 NaN,但如果没有发生交集,则并非所有对象都返回 NaN。
我知道如果没有发生交集,我可以强制返回 sqrt(-1),但我想知道是否有办法以更便宜的方式返回它。
【问题讨论】:
【参考方案1】:math.h
中的 NAN
宏也有效。
【讨论】:
应该在 C++ 中使用<cmath>
而不是 <math.h>
。【参考方案2】:
我知道这是一个老问题,但在 C++11 中,你有 nan(const char*)
系列函数(nan
用于双精度,nanl
用于长双精度,nanf
用于浮点数)。该参数是特定于实现的,但传递一个空字符串(例如nan("")
)会返回一个通用的 NaN 值。
【讨论】:
这里引用了nan
函数:cplusplus.com/reference/cmath/nan-function【参考方案3】:
这应该可行:
#include <limits>
return std::numeric_limits<double>::quiet_NaN();
【讨论】:
我想我花了一分钟来查找正确的标题。 :) 我暂时先离开这个,我认为它比接受的答案略好。【参考方案4】:return std::numeric_limits<double>::quiet_NaN();
【讨论】:
以上是关于故意返回 NaN的主要内容,如果未能解决你的问题,请参考以下文章
为啥 [NaN].includes(NaN) 在 JavaScript 中返回 true?
为啥 Double.NaN==Double.NaN 返回 false?