From efa08fda9ec485d80292d0487a77939c087dedcc Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Tue, 8 Sep 2026 07:26:15 -0700 Subject: [PATCH] Fixed zero handling for HNSW level selection - resolves #1023 Co-authored-by: cuishuang --- src/hnswutils.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hnswutils.c b/src/hnswutils.c index c4372b1..d927bbd 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -246,7 +246,8 @@ HnswInitElement(char *base, ItemPointer heaptid, int m, double ml, int maxLevel, { HnswElement element = HnswAlloc(allocator, sizeof(HnswElementData)); - int level = (int) (-log(RandomDouble()) * ml); + double uniform = RandomDouble(); + int level = uniform == 0.0 ? maxLevel : (int) (-log(uniform) * ml); /* Cap level */ if (level > maxLevel)