From a9959fede29fc9e4763952c0972ca336ffae7fef Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Mon, 25 Mar 2024 23:03:12 -0700 Subject: [PATCH] Improved code [skip ci] --- src/bitvector.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/bitvector.c b/src/bitvector.c index 2c54d20..5c31703 100644 --- a/src/bitvector.c +++ b/src/bitvector.c @@ -70,20 +70,21 @@ jaccard_distance(PG_FUNCTION_ARGS) VarBit *b = PG_GETARG_VARBIT_P(1); unsigned char *ax = VARBITS(a); unsigned char *bx = VARBITS(b); + uint64 ab = 0; uint64 aa; uint64 bb; - uint64 ab = 0; CheckBitLengths(VARBITLEN(a), VARBITLEN(b)); /* TODO Improve performance */ - aa = pg_popcount((char *) ax, VARBITBYTES(a)); - bb = pg_popcount((char *) bx, VARBITBYTES(b)); for (uint32 i = 0; i < VARBITBYTES(a); i++) ab += pg_number_of_ones[ax[i] & bx[i]]; if (ab == 0) PG_RETURN_FLOAT8(1); + aa = pg_popcount((char *) ax, VARBITBYTES(a)); + bb = pg_popcount((char *) bx, VARBITBYTES(b)); + PG_RETURN_FLOAT8(1 - (ab / ((double) (aa + bb - ab)))); }