From 54ebd4b7515b165a56595a1898979a8e4a069fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Thu, 31 Jan 2019 15:30:44 +0100 Subject: [PATCH] [integer] restore unlimited two_power_of_int --- src/libraries/stdlib/integer.ml | 10 ++++++---- src/libraries/stdlib/integer.mli | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/libraries/stdlib/integer.ml b/src/libraries/stdlib/integer.ml index 00fe1fc795d..b0fef64641f 100644 --- a/src/libraries/stdlib/integer.ml +++ b/src/libraries/stdlib/integer.ml @@ -27,12 +27,16 @@ let equal = Z.equal let compare = Z.compare let two_power_of_int k = + Z.shift_left Z.one k + +let two_power n = + let k = Z.to_int n in if k > 1024 then raise Z.Overflow else - Z.shift_left Z.one k + two_power_of_int k -let two_power n = two_power_of_int (Z.to_int n) +let power_int_positive_int = Big_int_Z.power_int_positive_int let popcount = Z.popcount @@ -279,5 +283,3 @@ let round_up_to_r ~min:m ~r ~modu = let round_down_to_r ~max:m ~r ~modu = add (round_down_to_zero (sub m r) modu) r - -let power_int_positive_int = Big_int_Z.power_int_positive_int diff --git a/src/libraries/stdlib/integer.mli b/src/libraries/stdlib/integer.mli index 3b9e69a8fd2..1e8202750a9 100644 --- a/src/libraries/stdlib/integer.mli +++ b/src/libraries/stdlib/integer.mli @@ -137,11 +137,11 @@ val round_down_to_r : max:t -> r:t -> modu:t -> t [n]<=[m] and [n] = [r] modulo [modu] *) val two_power : t -> t -(** [two_power x] computes 2^x. +(** Computes [2^n] @raise Z.Overflow for exponents greater than 1024 *) val two_power_of_int : int -> t -(** Similar to [two_power x], but x is an OCaml int. *) +(** Computes [2^n] *) val power_int_positive_int: int -> int -> t (** Exponentiation *) -- GitLab