check if rcond is nan
This commit is contained in:
@@ -288,7 +288,7 @@ glue_solve_gen_full::apply(Mat<eT>& out, const Base<eT,T1>& A_expr, const Base<e
|
||||
|
||||
|
||||
|
||||
if( (allow_ugly == false) && (status == true) && (fast == false) && (rcond < std::numeric_limits<T>::epsilon()) )
|
||||
if( (allow_ugly == false) && (status == true) && (fast == false) && ( (rcond < std::numeric_limits<T>::epsilon()) || arma_isnan(rcond) ) )
|
||||
{
|
||||
status = false;
|
||||
}
|
||||
@@ -324,7 +324,7 @@ glue_solve_gen_full::apply(Mat<eT>& out, const Base<eT,T1>& A_expr, const Base<e
|
||||
status = auxlib::solve_rect_rcond(out, rcond, A, B_expr.get_ref()); // A is overwritten
|
||||
}
|
||||
|
||||
if( (allow_ugly == false) && (status == true) && (fast == false) && (rcond < std::numeric_limits<T>::epsilon()) )
|
||||
if( (allow_ugly == false) && (status == true) && (fast == false) && ( (rcond < std::numeric_limits<T>::epsilon()) || arma_isnan(rcond) ) )
|
||||
{
|
||||
status = false;
|
||||
}
|
||||
@@ -402,7 +402,7 @@ glue_solve_tri_default::apply(Mat<eT>& actual_out, const Base<eT,T1>& A_expr, co
|
||||
|
||||
status = auxlib::solve_trimat_rcond(out, rcond, A, B_expr.get_ref(), layout); // A is not modified
|
||||
|
||||
if( (status == true) && (rcond < std::numeric_limits<T>::epsilon()) )
|
||||
if( (status == true) && ( (rcond < std::numeric_limits<T>::epsilon()) || arma_isnan(rcond) ) )
|
||||
{
|
||||
status = false;
|
||||
}
|
||||
@@ -514,7 +514,7 @@ glue_solve_tri_full::apply(Mat<eT>& actual_out, const Base<eT,T1>& A_expr, const
|
||||
status = auxlib::solve_trimat_rcond(out, rcond, A, B_expr.get_ref(), layout); // A is not modified
|
||||
}
|
||||
|
||||
if( (allow_ugly == false) && (status == true) && (fast == false) && (rcond < std::numeric_limits<T>::epsilon()) )
|
||||
if( (allow_ugly == false) && (status == true) && (fast == false) && ( (rcond < std::numeric_limits<T>::epsilon()) || arma_isnan(rcond) ) )
|
||||
{
|
||||
status = false;
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ op_inv_gen_full::apply_direct(Mat<typename T1::elem_type>& out, const Base<typen
|
||||
|
||||
const bool status = op_inv_gen_rcond::apply_direct(out, inv_state, expr);
|
||||
|
||||
if((status == false) || (inv_state.rcond < std::numeric_limits<T>::epsilon())) { return false; }
|
||||
if((status == false) || (inv_state.rcond < std::numeric_limits<T>::epsilon()) || arma_isnan(inv_state.rcond)) { return false; }
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -124,7 +124,7 @@ op_inv_gen_full::apply_direct(Mat<typename T1::elem_type>& out, const Base<typen
|
||||
|
||||
const bool status = op_inv_gen_rcond::apply_direct(tmp, inv_state, expr);
|
||||
|
||||
if((status == false) || (inv_state.rcond < std::numeric_limits<T>::epsilon()))
|
||||
if((status == false) || (inv_state.rcond < std::numeric_limits<T>::epsilon()) || arma_isnan(inv_state.rcond))
|
||||
{
|
||||
Mat<eT> A = expr.get_ref();
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ op_inv_spd_full::apply_direct(Mat<typename T1::elem_type>& out, const Base<typen
|
||||
|
||||
const bool status = op_inv_spd_rcond::apply_direct(out, rcond, expr);
|
||||
|
||||
if((status == false) || (rcond < std::numeric_limits<T>::epsilon())) { return false; }
|
||||
if((status == false) || (rcond < std::numeric_limits<T>::epsilon()) || arma_isnan(rcond)) { return false; }
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -126,7 +126,7 @@ op_inv_spd_full::apply_direct(Mat<typename T1::elem_type>& out, const Base<typen
|
||||
|
||||
const bool status = op_inv_spd_rcond::apply_direct(tmp, rcond, expr);
|
||||
|
||||
if((status == false) || (rcond < std::numeric_limits<T>::epsilon()))
|
||||
if((status == false) || (rcond < std::numeric_limits<T>::epsilon()) || arma_isnan(rcond))
|
||||
{
|
||||
const Mat<eT> A = expr.get_ref();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user