[ruby/prism] Fix recursive multiply when values are switched in karatsuba_multiply
https://github.com/ruby/prism/commit/4dc6ea960d
This commit is contained in:
parent
4f57262338
commit
0defbc11a5
@ -141,6 +141,13 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *
|
||||
size_t end_offset = start_offset + left_length;
|
||||
if (end_offset > right_length) end_offset = right_length;
|
||||
|
||||
pm_integer_t sliced_left = {
|
||||
.value = 0,
|
||||
.length = left_length,
|
||||
.values = left_values,
|
||||
.negative = false
|
||||
};
|
||||
|
||||
pm_integer_t sliced_right = {
|
||||
.value = 0,
|
||||
.length = end_offset - start_offset,
|
||||
@ -149,7 +156,7 @@ karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *
|
||||
};
|
||||
|
||||
pm_integer_t product;
|
||||
karatsuba_multiply(&product, left, &sliced_right, base);
|
||||
karatsuba_multiply(&product, &sliced_left, &sliced_right, base);
|
||||
|
||||
uint32_t carry = 0;
|
||||
for (size_t index = 0; index < product.length; index++) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user