diff --git a/src/libraries/stdlib/integer.ml b/src/libraries/stdlib/integer.ml index 00fe1fc795db028fb338b6c9092da825236eccc3..b0fef64641fe0da44eb43ddaf914eee0d06e9fa0 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 3b9e69a8fd2b8859c975bb1002f90555d643304c..1e8202750a985b5318dcfb11f1cb0c12286c17c9 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 *)