" C ++ NaN"我正在谈论的是this cmath function可能返回的那个:
double nan (const char* tagp);
" Armadillo NaN"是Armadillo linear algebra package:
的一部分datum::nan “not a number” (NaN); caveat: NaN is not equal to anything, even itself
混合它们是否安全?
思考练习:
假设您有一个函数可以从Armadillo矩阵中找到并返回一个值:
arma::mat lookup_table;
in a loop or something
double val = deriving_value_from_table(lookup_table, input1, input2, input3 ...)
假设该函数确定它应该返回lookup_table(3, 2)
,并且该值为arma::datum::nan
。
我可以使用val
并期望它是一个合适的NaN吗?如果我稍后将val
放入不同的犰狳矩阵,那么像arma::is_finite(X)
这样的函数是否仍能按预期工作呢?
答案 0 :(得分:3)
NaN是底层double
实现的一类值,几乎在任何定义std::nan
并且Armadillo可以运行的平台上,它将是通常的IEEE 754.任何安静的NaN都只是和其他任何一样丑陋 - 也就是说它们都会比任何价值(包括它自身)都不同,这是一个用硬件处理的东西,而不是Armadillo或标准库。
std::nan
返回和Armadillo NaN之间的唯一区别可能是它们可以具有不同的基础位模式 - 因为有许多不同的值是有效的NaN。尽管如此,只有明确检查底层字节的代码才能看到它的区别,因此在数字代码中应该完全无关紧要。