use arma_isnonfinite() for semantic simplification

This commit is contained in:
conrad
2025-06-06 13:04:45 +10:00
parent 74720f366d
commit 3cfec929f6
3 changed files with 48 additions and 6 deletions
+42
View File
@@ -65,6 +65,48 @@ arma_isfinite(const std::complex<T>& x)
}
//
template<typename eT>
inline
bool
arma_isnonfinite(eT)
{
return false;
}
template<>
inline
bool
arma_isnonfinite(float x)
{
return (std::isfinite(x) == false);
}
template<>
inline
bool
arma_isnonfinite(double x)
{
return (std::isfinite(x) == false);
}
template<typename T>
inline
bool
arma_isnonfinite(const std::complex<T>& x)
{
return ( (std::isfinite(x.real()) == false) || (std::isfinite(x.imag()) == false) );
}
//
// wrappers for isinf
+4 -4
View File
@@ -1019,8 +1019,8 @@ accu(const T1& X, const elem_opts::omit_indicator<omit_mode>&)
auto is_omitted = [](const eT& x) -> bool
{
if(omit_mode == 1) { return arma_isnan(x); }
if(omit_mode == 2) { return (arma_isfinite(x) == false); }
if(omit_mode == 1) { return arma_isnan(x); }
if(omit_mode == 2) { return arma_isnonfinite(x); }
};
eT val = eT(0);
@@ -1489,8 +1489,8 @@ accu(const SpBase<typename T1::elem_type, T1>& expr, const elem_opts::omit_indic
auto is_omitted = [](const eT& x) -> bool
{
if(omit_mode == 1) { return arma_isnan(x); }
if(omit_mode == 2) { return (arma_isfinite(x) == false); }
if(omit_mode == 1) { return arma_isnan(x); }
if(omit_mode == 2) { return arma_isnonfinite(x); }
};
const SpProxy<T1> P(expr.get_ref());
+2 -2
View File
@@ -433,8 +433,8 @@ op_sum_omit::apply(Mat<typename T1::elem_type>& out, const Op<T1,op_sum_omit>& i
arma_conform_check( (dim > 1), "sum(): parameter 'dim' must be 0 or 1" );
auto is_omitted_1 = [](const eT& x) -> bool { return arma_isnan(x); };
auto is_omitted_2 = [](const eT& x) -> bool { return (arma_isfinite(x) == false); };
auto is_omitted_1 = [](const eT& x) -> bool { return arma_isnan(x); };
auto is_omitted_2 = [](const eT& x) -> bool { return arma_isnonfinite(x); };
const Proxy<T1> P(in.m);