1(**************************************************************************) 2(* *) 3(* OCaml *) 4(* *) 5(* Valerie Menissier-Morain, projet Cristal, INRIA Rocquencourt *) 6(* *) 7(* Copyright 1996 Institut National de Recherche en Informatique et *) 8(* en Automatique. *) 9(* *) 10(* All rights reserved. This file is distributed under the terms of *) 11(* the GNU Lesser General Public License version 2.1, with the *) 12(* special exception on linking described in the file LICENSE. *) 13(* *) 14(**************************************************************************) 15 16(* Some extra operations on integers *) 17 18let rec gcd_int i1 i2 = 19 if i2 = 0 then abs i1 else gcd_int i2 (i1 mod i2) 20;; 21 22let rec num_bits_int_aux n = 23 if n = 0 then 0 else succ(num_bits_int_aux (n lsr 1));; 24 25let num_bits_int n = num_bits_int_aux (abs n);; 26 27let sign_int i = if i = 0 then 0 else if i > 0 then 1 else -1;; 28 29let length_of_int = Sys.word_size - 2;; 30 31let monster_int = 1 lsl length_of_int;; 32let biggest_int = monster_int - 1;; 33let least_int = - biggest_int;; 34 35let compare_int n1 n2 = 36 if n1 == n2 then 0 else if n1 > n2 then 1 else -1;; 37