Fixed out of range results for cosine distance - fixes #196

This commit is contained in:
Andrew Kane
2023-07-25 14:54:13 -07:00
parent f210791846
commit 47e5a86b63
4 changed files with 25 additions and 1 deletions

View File

@@ -630,6 +630,7 @@ cosine_distance(PG_FUNCTION_ARGS)
float distance = 0.0;
float norma = 0.0;
float normb = 0.0;
double similarity;
CheckDims(a, b);
@@ -642,7 +643,15 @@ cosine_distance(PG_FUNCTION_ARGS)
}
/* Use sqrt(a * b) over sqrt(a) * sqrt(b) */
PG_RETURN_FLOAT8(1.0 - ((double) distance / sqrt((double) norma * (double) normb)));
similarity = (double) distance / sqrt((double) norma * (double) normb);
/* Keep in range */
if (similarity > 1)
similarity = 1.0;
else if (similarity < -1)
similarity = -1.0;
PG_RETURN_FLOAT8(1.0 - similarity);
}
/*