gpt4 book ai didi

c++ - C++ NaN 和 Armadillo NaN 之间有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:07 25 4
gpt4 key购买 nike

我说的“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 放入不同的 Armadillo 矩阵中,像 arma::is_finite(X) 这样的函数是否仍会按预期工作?

最佳答案

NaN 是底层 double 实现的一类值,在几乎任何定义了 std::nan 且 Armadillo 可以运行的平台上,它将是通常的 IEEE 754。任何安静的 NaN 都和其他任何 NaN 一样丑陋 - 即它们都将与任何值(包括其自身)进行比较,这是在硬件中处理的事情,而不是 Armadillo 或标准库。

std::nan 返回值与 Armadillo NaN 之间的唯一区别可能是它们可以具有不同的底层位模式 - 因为有许多不同的值是有效的 NaN。尽管如此,这种差异仅对明确检查底层字节的代码可见,因此在数字代码中应该是完全不相关的。

关于c++ - C++ NaN 和 Armadillo NaN 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48550049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com