diff --git a/src/matrices.c b/src/matrices.c index 8a3d90f..f5e9fce 100644 --- a/src/matrices.c +++ b/src/matrices.c @@ -314,26 +314,36 @@ zsl_mtx_binary_op(struct zsl_mtx *ma, struct zsl_mtx *mb, struct zsl_mtx *mc, break; case ZSL_MTX_BINARY_OP_MEAN: mc->data[i] = (ma->data[i] + mb->data[i]) / 2.0; + break; case ZSL_MTX_BINARY_OP_EXPON: mc->data[i] = ZSL_POW(ma->data[i], mb->data[i]); + break; case ZSL_MTX_BINARY_OP_MIN: mc->data[i] = ma->data[i] < mb->data[i] ? ma->data[i] : mb->data[i]; + break; case ZSL_MTX_BINARY_OP_MAX: mc->data[i] = ma->data[i] > mb->data[i] ? ma->data[i] : mb->data[i]; + break; case ZSL_MTX_BINARY_OP_EQUAL: mc->data[i] = ma->data[i] == mb->data[i] ? 1.0 : 0.0; + break; case ZSL_MTX_BINARY_OP_NEQUAL: mc->data[i] = ma->data[i] != mb->data[i] ? 1.0 : 0.0; + break; case ZSL_MTX_BINARY_OP_LESS: mc->data[i] = ma->data[i] < mb->data[i] ? 1.0 : 0.0; + break; case ZSL_MTX_BINARY_OP_GREAT: mc->data[i] = ma->data[i] > mb->data[i] ? 1.0 : 0.0; + break; case ZSL_MTX_BINARY_OP_LEQ: mc->data[i] = ma->data[i] <= mb->data[i] ? 1.0 : 0.0; + break; case ZSL_MTX_BINARY_OP_GEQ: mc->data[i] = ma->data[i] >= mb->data[i] ? 1.0 : 0.0; + break; default: /* Not yet implemented! */ return -ENOSYS; diff --git a/src/vectors.c b/src/vectors.c index 78de74d..1b7a48d 100644 --- a/src/vectors.c +++ b/src/vectors.c @@ -372,7 +372,7 @@ int zsl_vec_zte(struct zsl_vec *v) for (size_t g = 0; g < v->sz; g++) { if ((v->data[g - x] >= 0.0 && v->data[g - x] < epsilon) || - (v->data[g - x] <= 0.0 && v->data[g - x] > epsilon)) { + (v->data[g - x] <= 0.0 && v->data[g - x] > -epsilon)) { for (size_t p = g - x; p < (v->sz - 1); p++) { v->data[p] = v->data[p + 1]; } @@ -484,7 +484,7 @@ int zsl_vec_sort(struct zsl_vec *v, struct zsl_vec *w) /* Copy the vector 'v' into the vector 'u' with no repeated values. */ for (j = 0; j < v->sz; j++) { - if (v->data[j] >= 1E-5 || v->data[j] <= 1E-5) { + if (v->data[j] >= 1E-5 || v->data[j] <= -1E-5) { if (zsl_vec_contains(&u, v->data[j], 1E-5) == 0) { u.data[count] = v->data[j]; count++;