C ++为什么要将某些内容转换为NaN?

时间:2016-10-07 17:56:32

标签: c++ math nan

我的理解是,NaN(非数字)是从数学函数返回的常量,表示出错或计算无效。因此,检查数字是否为NaN或更好的函数是有意义的,使用CERT编码标准对数学错误进行错误检查(https://www.securecoding.cert.org/confluence/display/c/FLP32-C.+Prevent+or+detect+domain+and+range+errors+in+math+functions)。

我的问题是这个;为什么std :: nan()存在?为什么你想要一个有效的数字/字符串/值并将其转换为NaN? (参考:http://en.cppreference.com/w/cpp/numeric/math/nan

3 个答案:

答案 0 :(得分:2)

NaN通常用于表示空值或缺失值,尤其是在数据分析和数据科学中。因此,应用程序将值初始化为nan是常见的,以便跟踪是否已提供值,而没有使用optional<T>类似结构的开销。

其次,创建自定义数学函数通常需要为某些输入返回nan。所以它不仅仅是为了完整性。

答案 1 :(得分:1)

假设您要实现std :: acos。如果输入无效(| arg |&lt; 1),你会如何返回nan?应该可以在C ++中实现这样的功能。除此之外,你可能需要编写一个STL没有提供的函数,C ++的独特图表之一是它的标准库可以用C ++编写。

答案 2 :(得分:1)

IEEE 754系统地介绍了使用NaN来表示其定义无法在计算机上显示的数字。

你会经常看到0/0,±inf /±inf,0 *±inf等。