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