From 56622e73fbefb9fc52b99111ecbb4e87e25e6f2f Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Sat, 30 Mar 2024 15:04:33 -0700 Subject: [PATCH] Fixed underflow error --- src/halfvec.c | 2 +- src/halfvec.h | 1 + src/hnswutils.c | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/halfvec.c b/src/halfvec.c index 4742c7e..7aefdc1 100644 --- a/src/halfvec.c +++ b/src/halfvec.c @@ -164,7 +164,7 @@ HalfToFloat4(half num) /* * Convert a float4 to a half */ -static half +half Float4ToHalfUnchecked(float num) { #ifdef FLT16_SUPPORT diff --git a/src/halfvec.h b/src/halfvec.h index 7ddad00..fdd3d6b 100644 --- a/src/halfvec.h +++ b/src/halfvec.h @@ -36,5 +36,6 @@ typedef struct HalfVector HalfVector *InitHalfVector(int dim); float HalfToFloat4(half num); half Float4ToHalf(float num); +half Float4ToHalfUnchecked(float num); #endif diff --git a/src/hnswutils.c b/src/hnswutils.c index 0b8c7c5..4ce9028 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -199,7 +199,10 @@ HnswNormValue(FmgrInfo *procinfo, Oid collation, Datum *value, int type) HalfVector *result = InitHalfVector(v->dim); for (int i = 0; i < v->dim; i++) - result->x[i] = Float4ToHalf(HalfToFloat4(v->x[i]) / norm); + { + /* TODO Fix */ + result->x[i] = Float4ToHalfUnchecked(HalfToFloat4(v->x[i]) / norm); + } *value = PointerGetDatum(result); }