C++ NaN 和 Armadillo NaN 之间有什么区别?
What are the differences between the C++ NaN and Armadillo NaN?
我说的 "C++ NaN" 可能 return 由 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 矩阵中找到并 returns 一个值:
arma::mat lookup_table;
in a loop or something
double val = deriving_value_from_table(lookup_table, input1, input2, input3 ...)
说函数确定它应该 return lookup_table(3, 2)
,并且说值是 arma::datum::nan
.
我可以使用 val
并期望它是一个正确的 NaN 吗?如果我稍后将 val
放入不同的 Armadillo 矩阵中,像 arma::is_finite(X)
这样的函数是否仍会按预期工作?
NaN 是底层 double
实现的 class 值,在几乎任何定义了 std::nan
且 Armadillo 可以 运行 的平台上,它将是通常的 IEEE 754。任何安静的 NaN 都和其他任何 NaN 一样丑陋 - 即它们都将与任何值(包括其自身)进行比较,这是在硬件中处理的事情,而不是 Armadillo 或标准库。
std::nan
returns 和犰狳 NaN 之间的唯一区别可能是它们可以有不同的底层位模式——因为有许多不同的值是有效的 NaN。尽管如此,这种差异仅对明确检查底层字节的代码可见,因此在数字代码中应该是完全不相关的。
我说的 "C++ NaN" 可能 return 由 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 矩阵中找到并 returns 一个值:
arma::mat lookup_table;
in a loop or something
double val = deriving_value_from_table(lookup_table, input1, input2, input3 ...)
说函数确定它应该 return lookup_table(3, 2)
,并且说值是 arma::datum::nan
.
我可以使用 val
并期望它是一个正确的 NaN 吗?如果我稍后将 val
放入不同的 Armadillo 矩阵中,像 arma::is_finite(X)
这样的函数是否仍会按预期工作?
NaN 是底层 double
实现的 class 值,在几乎任何定义了 std::nan
且 Armadillo 可以 运行 的平台上,它将是通常的 IEEE 754。任何安静的 NaN 都和其他任何 NaN 一样丑陋 - 即它们都将与任何值(包括其自身)进行比较,这是在硬件中处理的事情,而不是 Armadillo 或标准库。
std::nan
returns 和犰狳 NaN 之间的唯一区别可能是它们可以有不同的底层位模式——因为有许多不同的值是有效的 NaN。尽管如此,这种差异仅对明确检查底层字节的代码可见,因此在数字代码中应该是完全不相关的。