犰狳最大/最小功能处理NaN?

时间:2014-12-22 19:04:12

标签: c++ armadillo

当输入包含所有NAN值的向量时,

arma :: max和arma :: min似乎会提供意外结果。最小/最大函数返回+/- inf而不是返回NaN。这是库中的错误还是预期的行为?

#include <armadillo>
#include <numeric>
#include <iostream>
int main() {
    arma::vec v(2);
    v[0] = std::numeric_limits<double>::quiet_NaN();
    v[1] = std::numeric_limits<double>::quiet_NaN();
    std::cout << arma::max(v) << " " << arma::min(v) << std::endl;
    // output:  -inf inf 
    std::cout << std::max(v[0], v[1]) << " " << std::min(v[0],v[1]) << std::endl;
    // output:  -inf inf

}

供参考,GNU octave:

octave:1> min([nan,nan])
ans = NaN
octave:2> max([nan,nan])
ans = NaN

1 个答案:

答案 0 :(得分:2)

每个图书馆都有自己如何处理这个问题的方法。 Armadillo doesn't seem to document their choice,但它是完全合理有效的。我认为没有理由认为它是一个库错误。