2014-12-22 2 views
1

arma :: max и arma :: min, как представляется, дают неожиданные результаты при подаче вектора, содержащего все значения NAN. Вместо возврата NaN функции min/max возвращают +/- inf. Является ли это ошибкой в ​​библиотеке или ожидаемым поведением?armadillo max/min функция обработки 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

Я ожидаю, что это то же самое, что вы получите, если вы назовете его пустой строкой. –

Смежные вопросы