From 145c02e1c9ff2e6c1745dbac72395755e87c3ab0 Mon Sep 17 00:00:00 2001 From: cassowarii <2374677+cassowarii@users.noreply.github.com> Date: Thu, 9 Jul 2026 22:48:42 -0700 Subject: [PATCH] fix some math bugs --- src/data/integer.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/integer.c b/src/data/integer.c index 8b4f399..4426bf1 100644 --- a/src/data/integer.c +++ b/src/data/integer.c @@ -89,14 +89,14 @@ hInteger sbInteger_sum(hInteger a, hInteger b) { usize bsize = int_size(bigb); u64 carry = 0; /* + 1 here because we might need to carry into another slice */ - for (int i = 0; i < asize || i < bsize; i++) { + for (int i = 0; i < asize + 1 || i < bsize + 1; i++) { u64 a_piece = int_piece(biga, a, i); u64 b_piece = int_piece(bigb, b, i); u64 digit_sum = (u64)a_piece + (u64)b_piece + carry; BUFFER_INDEX_SET(result->buf, piece, i, digit_sum % BIGINT_PIECE_MAX); carry = 0; - if (digit_sum > BIGINT_PIECE_MAX) { + if (digit_sum >= BIGINT_PIECE_MAX) { carry = digit_sum / BIGINT_PIECE_MAX; } } @@ -160,7 +160,7 @@ hInteger sbInteger_mul(hInteger a, hInteger b) { u64 digit_sum = a_piece * b_piece + carry; BUFFER_INDEX_SET(result->buf, piece, ai + bi, digit_sum % BIGINT_PIECE_MAX); carry = 0; - if (digit_sum > BIGINT_PIECE_MAX) { + if (digit_sum >= BIGINT_PIECE_MAX) { carry = digit_sum / BIGINT_PIECE_MAX; } } -- 1.8.3.1