mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-10 14:46:56 +08:00
Improved code [skip ci]
This commit is contained in:
@@ -70,20 +70,21 @@ jaccard_distance(PG_FUNCTION_ARGS)
|
|||||||
VarBit *b = PG_GETARG_VARBIT_P(1);
|
VarBit *b = PG_GETARG_VARBIT_P(1);
|
||||||
unsigned char *ax = VARBITS(a);
|
unsigned char *ax = VARBITS(a);
|
||||||
unsigned char *bx = VARBITS(b);
|
unsigned char *bx = VARBITS(b);
|
||||||
|
uint64 ab = 0;
|
||||||
uint64 aa;
|
uint64 aa;
|
||||||
uint64 bb;
|
uint64 bb;
|
||||||
uint64 ab = 0;
|
|
||||||
|
|
||||||
CheckBitLengths(VARBITLEN(a), VARBITLEN(b));
|
CheckBitLengths(VARBITLEN(a), VARBITLEN(b));
|
||||||
|
|
||||||
/* TODO Improve performance */
|
/* 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++)
|
for (uint32 i = 0; i < VARBITBYTES(a); i++)
|
||||||
ab += pg_number_of_ones[ax[i] & bx[i]];
|
ab += pg_number_of_ones[ax[i] & bx[i]];
|
||||||
|
|
||||||
if (ab == 0)
|
if (ab == 0)
|
||||||
PG_RETURN_FLOAT8(1);
|
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))));
|
PG_RETURN_FLOAT8(1 - (ab / ((double) (aa + bb - ab))));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user