From ca8da8bdaba006491a4b0d643cf480ae0b127483 Mon Sep 17 00:00:00 2001 From: conrad Date: Mon, 26 Feb 2024 23:11:39 +1000 Subject: [PATCH] clear output arrays before use --- include/armadillo_bits/translate_blas.hpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/include/armadillo_bits/translate_blas.hpp b/include/armadillo_bits/translate_blas.hpp index 91fb6a2d..bfe34704 100644 --- a/include/armadillo_bits/translate_blas.hpp +++ b/include/armadillo_bits/translate_blas.hpp @@ -145,6 +145,9 @@ namespace blas eT result[2]; // paranoia: using two elements instead of one + result[0] = eT(0); + result[1] = eT(0); + blas::gemv(&trans, &m, &n, &alpha, x, &m, y, &inc, &beta, &result[0], &inc); return result[0]; @@ -186,11 +189,14 @@ namespace blas eT result[2]; // paranoia: using two elements instead of one + result[0] = eT(0); + result[1] = eT(0); + blas::gemv(&trans, &m, &n, &alpha, x, &m, y, &inc, &beta, &result[0], &inc); return result[0]; } - + return eT(0); } @@ -205,11 +211,13 @@ namespace blas if(is_float::value) { + // WARNING: sasum() from Accelerate framework (macOS) may return 'double' instead of 'float' + blas_int n = blas_int(n_elem); blas_int inc = 1; typedef float T; - return arma_fortran(arma_sasum)(&n, (const T*)x, &inc); + return eT( arma_fortran(arma_sasum)(&n, (const T*)x, &inc) ); } else if(is_double::value) @@ -218,7 +226,7 @@ namespace blas blas_int inc = 1; typedef double T; - return arma_fortran(arma_dasum)(&n, (const T*)x, &inc); + return eT( arma_fortran(arma_dasum)(&n, (const T*)x, &inc) ); } return eT(0); @@ -235,6 +243,8 @@ namespace blas if(is_float::value) { + // WARNING: snrm2() from Accelerate framework (macOS) may return 'double' instead of 'float' + blas_int n = blas_int(n_elem); blas_int inc = 1;