aboutsummaryrefslogtreecommitdiff
path: root/core/math/big/internal.odin
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2021-08-13 23:45:00 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2021-08-13 23:45:00 +0200
commitdc02566a84f0ad98aaa4f88f0a4e4abdd3aa1f1a (patch)
tree4547febeccdcbe7a1810e86d7286ead53b89c4c3 /core/math/big/internal.odin
parent37be8d40912a2fbf118efffdcf357aa68b78ec08 (diff)
big: Add `_private_int_div_recursive`.
Diffstat (limited to 'core/math/big/internal.odin')
-rw-r--r--core/math/big/internal.odin16
1 files changed, 14 insertions, 2 deletions
diff --git a/core/math/big/internal.odin b/core/math/big/internal.odin
index 6610c8429..506c5b683 100644
--- a/core/math/big/internal.odin
+++ b/core/math/big/internal.odin
@@ -260,6 +260,12 @@ internal_int_add_digit :: proc(dest, a: ^Int, digit: DIGIT, allocator := context
}
internal_add :: proc { internal_int_add_signed, internal_int_add_digit, };
+
+internal_int_incr :: proc(dest: ^Int, allocator := context.allocator) -> (err: Error) {
+ return #force_inline internal_add(dest, dest, 1);
+}
+internal_incr :: proc { internal_int_incr, };
+
/*
Low-level subtraction, dest = number - decrease. Assumes |number| > |decrease|.
Handbook of Applied Cryptography, algorithm 14.9.
@@ -458,6 +464,11 @@ internal_int_sub_digit :: proc(dest, number: ^Int, digit: DIGIT, allocator := co
internal_sub :: proc { internal_int_sub_signed, internal_int_sub_digit, };
+internal_int_decr :: proc(dest: ^Int, allocator := context.allocator) -> (err: Error) {
+ return #force_inline internal_sub(dest, dest, 1);
+}
+internal_decr :: proc { internal_int_decr, };
+
/*
dest = src / 2
dest = src >> 1
@@ -718,8 +729,9 @@ internal_int_divmod :: proc(quotient, remainder, numerator, denominator: ^Int, a
return nil;
}
- if false && (denominator.used > 2 * MUL_KARATSUBA_CUTOFF) && (denominator.used <= (numerator.used/3) * 2) {
- // err = _int_div_recursive(quotient, remainder, numerator, denominator);
+ if (denominator.used > 2 * MUL_KARATSUBA_CUTOFF) && (denominator.used <= (numerator.used/3) * 2) {
+ err = _private_int_div_recursive(quotient, remainder, numerator, denominator);
+ // err = #force_inline _private_int_div_school(quotient, remainder, numerator, denominator);
} else {
when true {
err = #force_inline _private_int_div_school(quotient, remainder, numerator, denominator);