sig   type t   exception Overflow   val zero : Z.t   val one : Z.t   val minus_one : Z.t   external of_int : int -> Z.t = "ml_z_of_int" [@@noalloc]   external of_int32 : int32 -> Z.t = "ml_z_of_int32"   external of_int64 : int64 -> Z.t = "ml_z_of_int64"   external of_nativeint : nativeint -> Z.t = "ml_z_of_nativeint"   external of_float : float -> Z.t = "ml_z_of_float"   val of_string : string -> Z.t   val of_substring : string -> pos:int -> len:int -> Z.t   val of_string_base : int -> string -> Z.t   external of_substring_base : int -> string -> pos:int -> len:int -> Z.t     = "ml_z_of_substring_base"   external succ : Z.t -> Z.t = "ml_z_succ" "ml_as_z_succ"   external pred : Z.t -> Z.t = "ml_z_pred" "ml_as_z_pred"   external abs : Z.t -> Z.t = "ml_z_abs" "ml_as_z_abs"   external neg : Z.t -> Z.t = "ml_z_neg" "ml_as_z_neg"   external add : Z.t -> Z.t -> Z.t = "ml_z_add" "ml_as_z_add"   external sub : Z.t -> Z.t -> Z.t = "ml_z_sub" "ml_as_z_sub"   external mul : Z.t -> Z.t -> Z.t = "ml_z_mul" "ml_as_z_mul"   external div : Z.t -> Z.t -> Z.t = "ml_z_div" "ml_as_z_div"   external rem : Z.t -> Z.t -> Z.t = "ml_z_rem" "ml_as_z_rem"   external div_rem : Z.t -> Z.t -> Z.t * Z.t = "ml_z_div_rem"   external cdiv : Z.t -> Z.t -> Z.t = "ml_z_cdiv"   external fdiv : Z.t -> Z.t -> Z.t = "ml_z_fdiv"   val ediv_rem : Z.t -> Z.t -> Z.t * Z.t   val ediv : Z.t -> Z.t -> Z.t   val erem : Z.t -> Z.t -> Z.t   external divexact : Z.t -> Z.t -> Z.t = "ml_z_divexact" "ml_as_z_divexact"   external logand : Z.t -> Z.t -> Z.t = "ml_z_logand" "ml_as_z_logand"   external logor : Z.t -> Z.t -> Z.t = "ml_z_logor" "ml_as_z_logor"   external logxor : Z.t -> Z.t -> Z.t = "ml_z_logxor" "ml_as_z_logxor"   external lognot : Z.t -> Z.t = "ml_z_lognot" "ml_as_z_lognot"   external shift_left : Z.t -> int -> Z.t = "ml_z_shift_left"     "ml_as_z_shift_left"   external shift_right : Z.t -> int -> Z.t = "ml_z_shift_right"     "ml_as_z_shift_right"   external shift_right_trunc : Z.t -> int -> Z.t = "ml_z_shift_right_trunc"   external numbits : Z.t -> int = "ml_z_numbits" [@@noalloc]   external trailing_zeros : Z.t -> int = "ml_z_trailing_zeros" [@@noalloc]   val testbit : Z.t -> int -> bool   external popcount : Z.t -> int = "ml_z_popcount"   external hamdist : Z.t -> Z.t -> int = "ml_z_hamdist"   external to_int : Z.t -> int = "ml_z_to_int"   external to_int32 : Z.t -> int32 = "ml_z_to_int32"   external to_int64 : Z.t -> int64 = "ml_z_to_int64"   external to_nativeint : Z.t -> nativeint = "ml_z_to_nativeint"   val to_float : Z.t -> float   val to_string : Z.t -> string   external format : string -> Z.t -> string = "ml_z_format"   external fits_int : Z.t -> bool = "ml_z_fits_int" [@@noalloc]   external fits_int32 : Z.t -> bool = "ml_z_fits_int32" [@@noalloc]   external fits_int64 : Z.t -> bool = "ml_z_fits_int64" [@@noalloc]   external fits_nativeint : Z.t -> bool = "ml_z_fits_nativeint" [@@noalloc]   val print : Z.t -> unit   val output : Pervasives.out_channel -> Z.t -> unit   val sprint : unit -> Z.t -> string   val bprint : Buffer.t -> Z.t -> unit   val pp_print : Format.formatter -> Z.t -> unit   external compare : Z.t -> Z.t -> int = "ml_z_compare" [@@noalloc]   external equal : Z.t -> Z.t -> bool = "ml_z_equal" [@@noalloc]   val leq : Z.t -> Z.t -> bool   val geq : Z.t -> Z.t -> bool   val lt : Z.t -> Z.t -> bool   val gt : Z.t -> Z.t -> bool   external sign : Z.t -> int = "ml_z_sign" [@@noalloc]   val min : Z.t -> Z.t -> Z.t   val max : Z.t -> Z.t -> Z.t   val is_even : Z.t -> bool   val is_odd : Z.t -> bool   external hash : Z.t -> int = "ml_z_hash" [@@noalloc]   external gcd : Z.t -> Z.t -> Z.t = "ml_z_gcd"   val gcdext : Z.t -> Z.t -> Z.t * Z.t * Z.t   val lcm : Z.t -> Z.t -> Z.t   external powm : Z.t -> Z.t -> Z.t -> Z.t = "ml_z_powm"   external powm_sec : Z.t -> Z.t -> Z.t -> Z.t = "ml_z_powm_sec"   external invert : Z.t -> Z.t -> Z.t = "ml_z_invert"   external probab_prime : Z.t -> int -> int = "ml_z_probab_prime"   external nextprime : Z.t -> Z.t = "ml_z_nextprime"   external pow : Z.t -> int -> Z.t = "ml_z_pow"   external sqrt : Z.t -> Z.t = "ml_z_sqrt"   external sqrt_rem : Z.t -> Z.t * Z.t = "ml_z_sqrt_rem"   external root : Z.t -> int -> Z.t = "ml_z_root"   external perfect_power : Z.t -> bool = "ml_z_perfect_power"   external perfect_square : Z.t -> bool = "ml_z_perfect_square"   val log2 : Z.t -> int   val log2up : Z.t -> int   external size : Z.t -> int = "ml_z_size" [@@noalloc]   external extract : Z.t -> int -> int -> Z.t = "ml_z_extract"   val signed_extract : Z.t -> int -> int -> Z.t   external to_bits : Z.t -> string = "ml_z_to_bits"   external of_bits : string -> Z.t = "ml_z_of_bits"   external ( ~- ) : Z.t -> Z.t = "ml_z_neg" "ml_as_z_neg"   val ( ~+ ) : Z.t -> Z.t   external ( + ) : Z.t -> Z.t -> Z.t = "ml_z_add" "ml_as_z_add"   external ( - ) : Z.t -> Z.t -> Z.t = "ml_z_sub" "ml_as_z_sub"   external ( * ) : Z.t -> Z.t -> Z.t = "ml_z_mul" "ml_as_z_mul"   external ( / ) : Z.t -> Z.t -> Z.t = "ml_z_div" "ml_as_z_div"   external ( /> ) : Z.t -> Z.t -> Z.t = "ml_z_cdiv"   external ( /< ) : Z.t -> Z.t -> Z.t = "ml_z_fdiv"   external ( /| ) : Z.t -> Z.t -> Z.t = "ml_z_divexact" "ml_as_z_divexact"   external ( mod ) : Z.t -> Z.t -> Z.t = "ml_z_rem" "ml_as_z_rem"   external ( land ) : Z.t -> Z.t -> Z.t = "ml_z_logand" "ml_as_z_logand"   external ( lor ) : Z.t -> Z.t -> Z.t = "ml_z_logor" "ml_as_z_logor"   external ( lxor ) : Z.t -> Z.t -> Z.t = "ml_z_logxor" "ml_as_z_logxor"   external ( ~! ) : Z.t -> Z.t = "ml_z_lognot" "ml_as_z_lognot"   external ( lsl ) : Z.t -> int -> Z.t = "ml_z_shift_left"     "ml_as_z_shift_left"   external ( asr ) : Z.t -> int -> Z.t = "ml_z_shift_right"     "ml_as_z_shift_right"   external ( ~$ ) : int -> Z.t = "ml_z_of_int" [@@noalloc]   external ( ** ) : Z.t -> int -> Z.t = "ml_z_pow"   val ( = ) : Z.t -> Z.t -> bool   val ( < ) : Z.t -> Z.t -> bool   val ( > ) : Z.t -> Z.t -> bool   val ( <= ) : Z.t -> Z.t -> bool   val ( >= ) : Z.t -> Z.t -> bool   val ( <> ) : Z.t -> Z.t -> bool   val version : string   val round_to_float : Z.t -> bool -> float end