diff --git a/include/armadillo_bits/op_dot_meat.hpp b/include/armadillo_bits/op_dot_meat.hpp index 40510ca6..dd6e8699 100644 --- a/include/armadillo_bits/op_dot_meat.hpp +++ b/include/armadillo_bits/op_dot_meat.hpp @@ -451,8 +451,10 @@ op_cdot::direct_cdot_generic(const uword n_elem, const eT* const A, const eT* co typedef typename get_pod_type::result T; - T val_real = T(0); - T val_imag = T(0); + typedef typename conditional_promote_type::value, T, float>::result acc_T; + + acc_T val_real = acc_T(0); + acc_T val_imag = acc_T(0); for(uword i=0; i(val_real, val_imag); + return std::complex( T(val_real), T(val_imag) ); } @@ -580,6 +582,8 @@ op_cdot::apply_proxy(const T1& X, const T2& Y) typedef typename T1::elem_type eT; typedef typename get_pod_type::result T; + typedef typename conditional_promote_type::value, T, float>::result acc_T; + typedef typename Proxy::ea_type ea_type1; typedef typename Proxy::ea_type ea_type2; @@ -597,8 +601,8 @@ op_cdot::apply_proxy(const T1& X, const T2& Y) ea_type1 A = PA.get_ea(); ea_type2 B = PB.get_ea(); - T val_real = T(0); - T val_imag = T(0); + acc_T val_real = acc_T(0); + acc_T val_imag = acc_T(0); for(uword i=0; i(val_real, val_imag); + return std::complex( T(val_real), T(val_imag) ); } else {