From 8eff17c1be935cb2685709cef8ba5e0ca2d8f2eb Mon Sep 17 00:00:00 2001 From: Abastro Date: Tue, 25 Mar 2025 22:31:07 +0900 Subject: [PATCH] Clearing corrects everything --- src/karatsuba.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/karatsuba.cpp b/src/karatsuba.cpp index 807fef2..4e82692 100644 --- a/src/karatsuba.cpp +++ b/src/karatsuba.cpp @@ -133,6 +133,10 @@ void poly_mult_Karatsuba_step(const size_t deg_bnd, span &a, span &b, return; } + // Result may be reused, so this needs clearing + for (auto &entry : result) + entry = 0; + const auto next_bnd = deg_bnd >> 1; auto a0 = a.subspan(0, next_bnd); auto a1 = a.subspan(next_bnd, next_bnd); @@ -144,8 +148,7 @@ void poly_mult_Karatsuba_step(const size_t deg_bnd, span &a, span &b, auto prod0 = result.subspan(0, deg_bnd); auto prod1 = result.subspan(deg_bnd, deg_bnd); - auto prod_add_vec = vector(deg_bnd); - auto prod_add = span(prod_add_vec); + auto prod_add = buffer.subspan(next_bnd * 2, next_bnd * 2); auto next_buffer = buffer.subspan(next_bnd * 4, next_bnd * 4);