check if rcond is nan

This commit is contained in:
conrad
2022-04-20 23:04:47 +10:00
parent 4789db1a7d
commit 6332a86974
3 changed files with 8 additions and 8 deletions
+4 -4
View File
@@ -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;
}
+2 -2
View File
@@ -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();
+2 -2
View File
@@ -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();