2014-12-22 8 views
1

arma :: max와 arma :: min은 모든 NAN 값을 포함하는 벡터를 공급할 때 예기치 않은 결과를 나타내는 것처럼 보입니다. NaN을 반환하는 대신 min/max 함수는 +/- inf를 반환합니다. 라이브러리의 버그입니까? 예상되는 동작입니까?armadillo 최대/최소 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:1> min([nan,nan]) 
ans = NaN 
octave:2> max([nan,nan]) 
ans = NaN 

답변

2

그것은 각 도서관의 몫으로 그들이이 문제를 처리하는 방법. Armadillo doesn't seem to document their choice이지만 완벽하고 합리적이고 유효한 것입니다. 라이브러리 버그라고 생각할 이유가 없습니다.

+1

빈 시퀀스로 호출하면 얻는 것과 같을 것이라고 기대합니다. –