summaryrefslogtreecommitdiffstats
path: root/otherlibs
diff options
context:
space:
mode:
authorPierre Weis <Pierre.Weis@inria.fr>2002-05-07 07:41:12 +0000
committerPierre Weis <Pierre.Weis@inria.fr>2002-05-07 07:41:12 +0000
commit01ca2d9ec2e0b3c8d84700da47b74d5b285baf5c (patch)
treed2f95aa8e369324fc94f20c01f7811a7e8bc9abe /otherlibs
parent219958e0df87a58c2a7b6d35d4020f436acb128c (diff)
Introducing a ``scanf'' facility in Objective Caml.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@4780 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'otherlibs')
-rw-r--r--otherlibs/graph/subwindow.c9
-rw-r--r--otherlibs/labltk/camltk/.depend62
-rw-r--r--otherlibs/labltk/labltk/.depend30
-rw-r--r--otherlibs/num/big_int.ml492
-rw-r--r--otherlibs/num/int_misc.ml22
-rw-r--r--otherlibs/threads/Makefile3
6 files changed, 321 insertions, 297 deletions
diff --git a/otherlibs/graph/subwindow.c b/otherlibs/graph/subwindow.c
index 8fb8b6387..a97242de0 100644
--- a/otherlibs/graph/subwindow.c
+++ b/otherlibs/graph/subwindow.c
@@ -15,19 +15,18 @@
#include "libgraph.h"
-value gr_open_subwindow(value grx, value gry, value width, value height)
+value gr_open_subwindow(value vx, value vy, value width, value height)
{
Window win;
int h = Int_val(height);
int w = Int_val(width);
- int x = Int_val(grx);
- int y = Int_val(gry);
+ int x = Int_val(vx);
+ int y = Int_val(vy);
gr_check_open();
win = XCreateSimpleWindow(grdisplay, grwindow.win,
- x, Wcvt(y - h),
- w, h,
+ x, Wcvt(y + h), w, h,
0, grblack, grbackground);
XMapWindow(grdisplay, win);
XFlush(grdisplay);
diff --git a/otherlibs/labltk/camltk/.depend b/otherlibs/labltk/camltk/.depend
index 203fe291a..6c4ac94bc 100644
--- a/otherlibs/labltk/camltk/.depend
+++ b/otherlibs/labltk/camltk/.depend
@@ -11,16 +11,16 @@ cFont.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cFrame.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cGrab.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cGrid.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
-cImage.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cImagebitmap.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
+cImage.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cImagephoto.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cLabel.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cListbox.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
-cMenu.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cMenubutton.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
+cMenu.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cMessage.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
-cOption.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cOptionmenu.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
+cOption.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cPack.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cPalette.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cPixmap.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
@@ -36,6 +36,22 @@ cTkwait.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cToplevel.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cWinfo.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
cWm.cmi: cTk.cmo ../support/textvariable.cmi ../support/widget.cmi
+camltk.cmo: cBell.cmi cButton.cmi cCanvas.cmi cCheckbutton.cmi cClipboard.cmi \
+ cDialog.cmi cEncoding.cmi cEntry.cmi cFocus.cmi cFont.cmi cFrame.cmi \
+ cGrab.cmi cGrid.cmi cImage.cmi cImagebitmap.cmi cImagephoto.cmi \
+ cLabel.cmi cListbox.cmi cMenu.cmi cMenubutton.cmi cMessage.cmi \
+ cOption.cmi cOptionmenu.cmi cPack.cmi cPalette.cmi cPixmap.cmi cPlace.cmi \
+ cRadiobutton.cmi cResource.cmi cScale.cmi cScrollbar.cmi cSelection.cmi \
+ cText.cmi cTk.cmo cTkvars.cmi cTkwait.cmi cToplevel.cmi cWinfo.cmi \
+ cWm.cmi
+camltk.cmx: cBell.cmx cButton.cmx cCanvas.cmx cCheckbutton.cmx cClipboard.cmx \
+ cDialog.cmx cEncoding.cmx cEntry.cmx cFocus.cmx cFont.cmx cFrame.cmx \
+ cGrab.cmx cGrid.cmx cImage.cmx cImagebitmap.cmx cImagephoto.cmx \
+ cLabel.cmx cListbox.cmx cMenu.cmx cMenubutton.cmx cMessage.cmx \
+ cOption.cmx cOptionmenu.cmx cPack.cmx cPalette.cmx cPixmap.cmx cPlace.cmx \
+ cRadiobutton.cmx cResource.cmx cScale.cmx cScrollbar.cmx cSelection.cmx \
+ cText.cmx cTk.cmx cTkvars.cmx cTkwait.cmx cToplevel.cmx cWinfo.cmx \
+ cWm.cmx
cBell.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cBell.cmi
cBell.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
@@ -88,14 +104,14 @@ cGrid.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cGrid.cmi
cGrid.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
../support/widget.cmx cGrid.cmi
-cImage.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
- ../support/widget.cmi cImage.cmi
-cImage.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
- ../support/widget.cmx cImage.cmi
cImagebitmap.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cImagebitmap.cmi
cImagebitmap.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
../support/widget.cmx cImagebitmap.cmi
+cImage.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
+ ../support/widget.cmi cImage.cmi
+cImage.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
+ ../support/widget.cmx cImage.cmi
cImagephoto.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cImagephoto.cmi
cImagephoto.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
@@ -108,26 +124,26 @@ cListbox.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cListbox.cmi
cListbox.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
../support/widget.cmx cListbox.cmi
-cMenu.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
- ../support/widget.cmi cMenu.cmi
-cMenu.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
- ../support/widget.cmx cMenu.cmi
cMenubutton.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cMenubutton.cmi
cMenubutton.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
../support/widget.cmx cMenubutton.cmi
+cMenu.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
+ ../support/widget.cmi cMenu.cmi
+cMenu.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
+ ../support/widget.cmx cMenu.cmi
cMessage.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cMessage.cmi
cMessage.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
../support/widget.cmx cMessage.cmi
-cOption.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
- ../support/widget.cmi cOption.cmi
-cOption.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
- ../support/widget.cmx cOption.cmi
cOptionmenu.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cOptionmenu.cmi
cOptionmenu.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
../support/widget.cmx cOptionmenu.cmi
+cOption.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
+ ../support/widget.cmi cOption.cmi
+cOption.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
+ ../support/widget.cmx cOption.cmi
cPack.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cPack.cmi
cPack.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
@@ -192,19 +208,3 @@ cWm.cmo: cTk.cmo ../support/protocol.cmi ../support/textvariable.cmi \
../support/widget.cmi cWm.cmi
cWm.cmx: cTk.cmx ../support/protocol.cmx ../support/textvariable.cmx \
../support/widget.cmx cWm.cmi
-camltk.cmo: cBell.cmi cButton.cmi cCanvas.cmi cCheckbutton.cmi cClipboard.cmi \
- cDialog.cmi cEncoding.cmi cEntry.cmi cFocus.cmi cFont.cmi cFrame.cmi \
- cGrab.cmi cGrid.cmi cImage.cmi cImagebitmap.cmi cImagephoto.cmi \
- cLabel.cmi cListbox.cmi cMenu.cmi cMenubutton.cmi cMessage.cmi \
- cOption.cmi cOptionmenu.cmi cPack.cmi cPalette.cmi cPixmap.cmi cPlace.cmi \
- cRadiobutton.cmi cResource.cmi cScale.cmi cScrollbar.cmi cSelection.cmi \
- cText.cmi cTk.cmo cTkvars.cmi cTkwait.cmi cToplevel.cmi cWinfo.cmi \
- cWm.cmi
-camltk.cmx: cBell.cmx cButton.cmx cCanvas.cmx cCheckbutton.cmx cClipboard.cmx \
- cDialog.cmx cEncoding.cmx cEntry.cmx cFocus.cmx cFont.cmx cFrame.cmx \
- cGrab.cmx cGrid.cmx cImage.cmx cImagebitmap.cmx cImagephoto.cmx \
- cLabel.cmx cListbox.cmx cMenu.cmx cMenubutton.cmx cMessage.cmx \
- cOption.cmx cOptionmenu.cmx cPack.cmx cPalette.cmx cPixmap.cmx cPlace.cmx \
- cRadiobutton.cmx cResource.cmx cScale.cmx cScrollbar.cmx cSelection.cmx \
- cText.cmx cTk.cmx cTkvars.cmx cTkwait.cmx cToplevel.cmx cWinfo.cmx \
- cWm.cmx
diff --git a/otherlibs/labltk/labltk/.depend b/otherlibs/labltk/labltk/.depend
index f1273b18b..e3cd27cf1 100644
--- a/otherlibs/labltk/labltk/.depend
+++ b/otherlibs/labltk/labltk/.depend
@@ -11,16 +11,16 @@ font.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
frame.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
grab.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
grid.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
-image.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
imagebitmap.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
+image.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
imagephoto.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
label.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
listbox.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
-menu.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
menubutton.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
+menu.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
message.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
-option.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
optionmenu.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
+option.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
pack.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
palette.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
pixmap.cmi: ../support/textvariable.cmi tk.cmo ../support/widget.cmi
@@ -87,14 +87,14 @@ grid.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
../support/widget.cmi grid.cmi
grid.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
../support/widget.cmx grid.cmi
-image.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
- ../support/widget.cmi image.cmi
-image.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
- ../support/widget.cmx image.cmi
imagebitmap.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
../support/widget.cmi imagebitmap.cmi
imagebitmap.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
../support/widget.cmx imagebitmap.cmi
+image.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
+ ../support/widget.cmi image.cmi
+image.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
+ ../support/widget.cmx image.cmi
imagephoto.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
../support/widget.cmi imagephoto.cmi
imagephoto.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
@@ -125,26 +125,26 @@ listbox.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
../support/widget.cmi listbox.cmi
listbox.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
../support/widget.cmx listbox.cmi
-menu.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
- ../support/widget.cmi menu.cmi
-menu.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
- ../support/widget.cmx menu.cmi
menubutton.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
../support/widget.cmi menubutton.cmi
menubutton.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
../support/widget.cmx menubutton.cmi
+menu.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
+ ../support/widget.cmi menu.cmi
+menu.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
+ ../support/widget.cmx menu.cmi
message.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
../support/widget.cmi message.cmi
message.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
../support/widget.cmx message.cmi
-option.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
- ../support/widget.cmi option.cmi
-option.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
- ../support/widget.cmx option.cmi
optionmenu.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
../support/widget.cmi optionmenu.cmi
optionmenu.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
../support/widget.cmx optionmenu.cmi
+option.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
+ ../support/widget.cmi option.cmi
+option.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
+ ../support/widget.cmx option.cmi
pack.cmo: ../support/protocol.cmi ../support/textvariable.cmi tk.cmo \
../support/widget.cmi pack.cmi
pack.cmx: ../support/protocol.cmx ../support/textvariable.cmx tk.cmx \
diff --git a/otherlibs/num/big_int.ml b/otherlibs/num/big_int.ml
index 7542f1f89..dec89b710 100644
--- a/otherlibs/num/big_int.ml
+++ b/otherlibs/num/big_int.ml
@@ -13,45 +13,51 @@
(* $Id$ *)
-open Int_misc
-open Nat
+open Int_misc;;
+open Nat;;
type big_int =
{ sign : int;
abs_value : nat }
+;;
+
+(* Sign of a big_int *)
+let sign_big_int bi = bi.sign;;
let create_big_int sign nat =
- if sign = 1 || sign = -1 ||
- (sign = 0 &&
+ if sign == 1 || sign == -1 ||
+ (sign == 0 &&
is_zero_nat nat 0 (num_digits_nat nat 0 (length_nat nat)))
- then { sign = sign;
- abs_value = nat }
+ then { sign = sign;
+ abs_value = nat }
else invalid_arg "create_big_int"
-
-(* Sign of a big_int *)
-let sign_big_int bi = bi.sign
+;;
let zero_big_int =
{ sign = 0;
abs_value = make_nat 1 }
+;;
let unit_big_int =
{ sign = 1;
abs_value = nat_of_int 1 }
+;;
(* Number of digits in a big_int *)
let num_digits_big_int bi =
- num_digits_nat (bi.abs_value) 0 (length_nat bi.abs_value)
+ num_digits_nat (bi.abs_value) 0 (length_nat bi.abs_value);;
(* Opposite of a big_int *)
let minus_big_int bi =
{ sign = - bi.sign;
abs_value = copy_nat (bi.abs_value) 0 (num_digits_big_int bi)}
+;;
(* Absolute value of a big_int *)
let abs_big_int bi =
- { sign = if bi.sign = 0 then 0 else 1;
+ { sign = if bi.sign == 0 then 0 else 1;
abs_value = copy_nat (bi.abs_value) 0 (num_digits_big_int bi)}
+;;
(* Comparison operators on big_int *)
@@ -62,120 +68,128 @@ let abs_big_int bi =
-1 if bi < bi2
*)
let compare_big_int bi1 bi2 =
- if bi1.sign = 0 && bi2.sign = 0 then 0
- else if bi1.sign < bi2.sign then -1
- else if bi1.sign > bi2.sign then 1
- else if bi1.sign = 1 then
- compare_nat (bi1.abs_value) 0 (num_digits_big_int bi1)
- (bi2.abs_value) 0 (num_digits_big_int bi2)
+ if bi1.sign == 0 && bi2.sign == 0 then 0 else
+ if bi1.sign < bi2.sign then -1 else
+ if bi1.sign > bi2.sign then 1 else
+ if bi1.sign == 1 then
+ compare_nat (bi1.abs_value) 0 (num_digits_big_int bi1)
+ (bi2.abs_value) 0 (num_digits_big_int bi2)
else
- compare_nat (bi2.abs_value) 0 (num_digits_big_int bi2)
- (bi1.abs_value) 0 (num_digits_big_int bi1)
+ compare_nat (bi2.abs_value) 0 (num_digits_big_int bi2)
+ (bi1.abs_value) 0 (num_digits_big_int bi1)
+;;
-let eq_big_int bi1 bi2 = compare_big_int bi1 bi2 = 0
+let eq_big_int bi1 bi2 = compare_big_int bi1 bi2 == 0
and le_big_int bi1 bi2 = compare_big_int bi1 bi2 <= 0
and ge_big_int bi1 bi2 = compare_big_int bi1 bi2 >= 0
and lt_big_int bi1 bi2 = compare_big_int bi1 bi2 < 0
and gt_big_int bi1 bi2 = compare_big_int bi1 bi2 > 0
+;;
let max_big_int bi1 bi2 = if lt_big_int bi1 bi2 then bi2 else bi1
and min_big_int bi1 bi2 = if gt_big_int bi1 bi2 then bi2 else bi1
+;;
(* Operations on big_int *)
let pred_big_int bi =
match bi.sign with
- 0 -> { sign = -1; abs_value = nat_of_int 1}
- | 1 -> let size_bi = num_digits_big_int bi in
- let copy_bi = copy_nat (bi.abs_value) 0 size_bi in
- decr_nat copy_bi 0 size_bi 0;
- { sign = if is_zero_nat copy_bi 0 size_bi then 0 else 1;
- abs_value = copy_bi }
- | _ -> let size_bi = num_digits_big_int bi in
- let size_res = succ (size_bi) in
- let copy_bi = create_nat (size_res) in
- blit_nat copy_bi 0 (bi.abs_value) 0 size_bi;
- set_digit_nat copy_bi size_bi 0;
- incr_nat copy_bi 0 size_res 1;
- { sign = -1;
- abs_value = copy_bi }
+ | 0 -> { sign = -1; abs_value = nat_of_int 1}
+ | 1 -> let size_bi = num_digits_big_int bi in
+ let copy_bi = copy_nat (bi.abs_value) 0 size_bi in
+ decr_nat copy_bi 0 size_bi 0;
+ { sign = if is_zero_nat copy_bi 0 size_bi then 0 else 1;
+ abs_value = copy_bi }
+ | _ -> let size_bi = num_digits_big_int bi in
+ let size_res = succ (size_bi) in
+ let copy_bi = create_nat (size_res) in
+ blit_nat copy_bi 0 (bi.abs_value) 0 size_bi;
+ set_digit_nat copy_bi size_bi 0;
+ incr_nat copy_bi 0 size_res 1;
+ { sign = -1;
+ abs_value = copy_bi }
+;;
let succ_big_int bi =
match bi.sign with
- 0 -> {sign = 1; abs_value = nat_of_int 1}
- | -1 -> let size_bi = num_digits_big_int bi in
- let copy_bi = copy_nat (bi.abs_value) 0 size_bi in
- decr_nat copy_bi 0 size_bi 0;
- { sign = if is_zero_nat copy_bi 0 size_bi then 0 else -1;
- abs_value = copy_bi }
- | _ -> let size_bi = num_digits_big_int bi in
- let size_res = succ (size_bi) in
- let copy_bi = create_nat (size_res) in
- blit_nat copy_bi 0 (bi.abs_value) 0 size_bi;
- set_digit_nat copy_bi size_bi 0;
- incr_nat copy_bi 0 size_res 1;
- { sign = 1;
- abs_value = copy_bi }
+ | 0 -> {sign = 1; abs_value = nat_of_int 1}
+ | -1 -> let size_bi = num_digits_big_int bi in
+ let copy_bi = copy_nat (bi.abs_value) 0 size_bi in
+ decr_nat copy_bi 0 size_bi 0;
+ { sign = if is_zero_nat copy_bi 0 size_bi then 0 else -1;
+ abs_value = copy_bi }
+ | _ -> let size_bi = num_digits_big_int bi in
+ let size_res = succ (size_bi) in
+ let copy_bi = create_nat (size_res) in
+ blit_nat copy_bi 0 (bi.abs_value) 0 size_bi;
+ set_digit_nat copy_bi size_bi 0;
+ incr_nat copy_bi 0 size_res 1;
+ { sign = 1;
+ abs_value = copy_bi }
+;;
let add_big_int bi1 bi2 =
let size_bi1 = num_digits_big_int bi1
and size_bi2 = num_digits_big_int bi2 in
- if bi1.sign = bi2.sign
+ if bi1.sign == bi2.sign
then (* Add absolute values if signs are the same *)
{ sign = bi1.sign;
abs_value =
match compare_nat (bi1.abs_value) 0 size_bi1
(bi2.abs_value) 0 size_bi2 with
- -1 -> let res = create_nat (succ size_bi2) in
+ | -1 -> let res = create_nat (succ size_bi2) in
(blit_nat res 0 (bi2.abs_value) 0 size_bi2;
set_digit_nat res size_bi2 0;
- add_nat res 0 (succ size_bi2)
- (bi1.abs_value) 0 size_bi1 0;
+ add_nat res 0 (succ size_bi2)
+ (bi1.abs_value) 0 size_bi1 0;
res)
- |_ -> let res = create_nat (succ size_bi1) in
+ | _ -> let res = create_nat (succ size_bi1) in
(blit_nat res 0 (bi1.abs_value) 0 size_bi1;
set_digit_nat res size_bi1 0;
- add_nat res 0 (succ size_bi1)
- (bi2.abs_value) 0 size_bi2 0;
+ add_nat res 0 (succ size_bi1)
+ (bi2.abs_value) 0 size_bi2 0;
res)}
else (* Subtract absolute values if signs are different *)
match compare_nat (bi1.abs_value) 0 size_bi1
(bi2.abs_value) 0 size_bi2 with
- 0 -> zero_big_int
- | 1 -> { sign = bi1.sign;
- abs_value =
- let res = copy_nat (bi1.abs_value) 0 size_bi1 in
- (sub_nat res 0 size_bi1
- (bi2.abs_value) 0 size_bi2 1;
- res) }
- | _ -> { sign = bi2.sign;
- abs_value =
- let res = copy_nat (bi2.abs_value) 0 size_bi2 in
- (sub_nat res 0 size_bi2
- (bi1.abs_value) 0 size_bi1 1;
- res) }
+ | 0 -> zero_big_int
+ | 1 -> { sign = bi1.sign;
+ abs_value =
+ let res = copy_nat (bi1.abs_value) 0 size_bi1 in
+ sub_nat res 0 size_bi1
+ (bi2.abs_value) 0 size_bi2 1;
+ res }
+ | _ -> { sign = bi2.sign;
+ abs_value =
+ let res = copy_nat (bi2.abs_value) 0 size_bi2 in
+ sub_nat res 0 size_bi2
+ (bi1.abs_value) 0 size_bi1 1;
+ res }
+;;
(* Coercion with int type *)
let big_int_of_int i =
{ sign = sign_int i;
abs_value =
let res = (create_nat 1)
- in (if i = monster_int
+ in (if i == monster_int
then (set_digit_nat res 0 biggest_int;
- incr_nat res 0 1 1; ())
+ incr_nat res 0 1 1;
+ ())
else set_digit_nat res 0 (abs i));
res }
+;;
-let add_int_big_int i bi = add_big_int (big_int_of_int i) bi
+let add_int_big_int i bi = add_big_int (big_int_of_int i) bi;;
-let sub_big_int bi1 bi2 = add_big_int bi1 (minus_big_int bi2)
+let sub_big_int bi1 bi2 = add_big_int bi1 (minus_big_int bi2);;
(* Returns i * bi *)
let mult_int_big_int i bi =
let size_bi = num_digits_big_int bi in
let size_res = succ size_bi in
- if i = monster_int
+ if i == monster_int
then let res = create_nat size_res in
blit_nat res 0 (bi.abs_value) 0 size_bi;
mult_digit_nat res 0 size_res (bi.abs_value) 0 size_bi
@@ -187,6 +201,7 @@ let mult_int_big_int i bi =
(nat_of_int (abs i)) 0;
{ sign = (sign_int i) * (sign_big_int bi);
abs_value = res }
+;;
let mult_big_int bi1 bi2 =
let size_bi1 = num_digits_big_int bi1
@@ -195,86 +210,93 @@ let mult_big_int bi1 bi2 =
let res = make_nat (size_res) in
{ sign = bi1.sign * bi2.sign;
abs_value =
- if size_bi2 > size_bi1
- then (mult_nat res 0 size_res (bi2.abs_value) 0 size_bi2
- (bi1.abs_value) 0 size_bi1;res)
- else (mult_nat res 0 size_res (bi1.abs_value) 0 size_bi1
- (bi2.abs_value) 0 size_bi2;res) }
+ if size_bi2 > size_bi1
+ then (mult_nat res 0 size_res (bi2.abs_value) 0 size_bi2
+ (bi1.abs_value) 0 size_bi1;
+ res)
+ else (mult_nat res 0 size_res (bi1.abs_value) 0 size_bi1
+ (bi2.abs_value) 0 size_bi2;
+ res) }
+;;
(* (quotient, rest) of the euclidian division of 2 big_int *)
let quomod_big_int bi1 bi2 =
- if bi2.sign = 0 then raise Division_by_zero
+ if bi2.sign == 0 then raise Division_by_zero
else
let size_bi1 = num_digits_big_int bi1
and size_bi2 = num_digits_big_int bi2 in
match compare_nat (bi1.abs_value) 0 size_bi1
(bi2.abs_value) 0 size_bi2 with
- -1 -> (* 1/2 -> 0, reste 1, -1/2 -> -1, reste 1 *)
- if bi1.sign = -1
- then (big_int_of_int(-1), add_big_int bi2 bi1)
- else (big_int_of_int 0, bi1)
- | 0 -> (big_int_of_int (bi1.sign * bi2.sign), zero_big_int)
- | _ -> let bi1_negatif = bi1.sign = -1 in
- let size_q =
- if bi1_negatif
- then succ (max (succ (size_bi1 - size_bi2)) 1)
- else max (succ (size_bi1 - size_bi2)) 1
- and size_r = succ (max size_bi1 size_bi2)
- (* r is long enough to contain both quotient and remainder *)
- (* of the euclidian division *)
- in
- (* set up quotient, remainder *)
- let q = create_nat size_q
- and r = create_nat size_r in
- blit_nat r 0 (bi1.abs_value) 0 size_bi1;
- set_to_zero_nat r size_bi1 (size_r - size_bi1);
-
- (* do the division of |bi1| by |bi2|
- - at the beginning, r contains |bi1|
- - at the end, r contains
- * in the size_bi2 least significant digits, the remainder
- * in the size_r-size_bi2 most significant digits, the quotient
- note the conditions for application of div_nat are verified here
- *)
- div_nat r 0 size_r (bi2.abs_value) 0 size_bi2;
-
- (* separate quotient and remainder *)
- blit_nat q 0 r size_bi2 (size_r - size_bi2);
- let not_null_mod = not (is_zero_nat r 0 size_bi2) in
-
- (* correct the signs, adjusting the quotient and remainder *)
- if bi1_negatif && not_null_mod
- then
- (* bi1<0, r>0, noting r for (r, size_bi2) the remainder, *)
- (* we have |bi1|=q * |bi2| + r with 0 < r < |bi2|, *)
- (* thus -bi1 = q * |bi2| + r *)
- (* and bi1 = (-q) * |bi2| + (-r) with -|bi2| < (-r) < 0 *)
- (* thus bi1 = -(q+1) * |bi2| + (|bi2|-r) *)
- (* with 0 < (|bi2|-r) < |bi2| *)
- (* so the quotient has for sign the opposite of the bi2'one *)
- (* and for value q+1 *)
- (* and the remainder is strictly positive *)
- (* has for value |bi2|-r *)
- (let new_r = copy_nat (bi2.abs_value) 0 size_bi2 in
- (* new_r contains (r, size_bi2) the remainder *)
- { sign = - bi2.sign;
- abs_value = (set_digit_nat q (pred size_q) 0;
- incr_nat q 0 size_q 1; q) },
- { sign = 1;
+ | -1 -> (* 1/2 -> 0, reste 1, -1/2 -> -1, reste 1 *)
+ if bi1.sign == -1
+ then (big_int_of_int(-1), add_big_int bi2 bi1)
+ else (zero_big_int, bi1)
+ | 0 -> (big_int_of_int (bi1.sign * bi2.sign), zero_big_int)
+ | _ -> let bi1_negatif = bi1.sign == -1 in
+ let size_q =
+ if bi1_negatif
+ then succ (max (succ (size_bi1 - size_bi2)) 1)
+ else max (succ (size_bi1 - size_bi2)) 1
+ and size_r = succ (max size_bi1 size_bi2)
+ (* r is long enough to contain both quotient and remainder *)
+ (* of the euclidian division *)
+ in
+ (* set up quotient, remainder *)
+ let q = create_nat size_q
+ and r = create_nat size_r in
+ blit_nat r 0 (bi1.abs_value) 0 size_bi1;
+ set_to_zero_nat r size_bi1 (size_r - size_bi1);
+
+ (* do the division of |bi1| by |bi2|
+ - at the beginning, r contains |bi1|
+ - at the end, r contains
+ * in the size_bi2 least significant digits, the remainder
+ * in the size_r-size_bi2 most significant digits, the quotient
+ note the conditions for application of div_nat are verified here
+ *)
+ div_nat r 0 size_r (bi2.abs_value) 0 size_bi2;
+
+ (* separate quotient and remainder *)
+ blit_nat q 0 r size_bi2 (size_r - size_bi2);
+ let not_null_mod = not (is_zero_nat r 0 size_bi2) in
+
+ (* correct the signs, adjusting the quotient and remainder *)
+ if bi1_negatif && not_null_mod
+ then
+ (* bi1<0, r>0, noting r for (r, size_bi2) the remainder, *)
+ (* we have |bi1|=q * |bi2| + r with 0 < r < |bi2|, *)
+ (* thus -bi1 = q * |bi2| + r *)
+ (* and bi1 = (-q) * |bi2| + (-r) with -|bi2| < (-r) < 0 *)
+ (* thus bi1 = -(q+1) * |bi2| + (|bi2|-r) *)
+ (* with 0 < (|bi2|-r) < |bi2| *)
+ (* so the quotient has for sign the opposite of the bi2'one *)
+ (* and for value q+1 *)
+ (* and the remainder is strictly positive *)
+ (* has for value |bi2|-r *)
+ (let new_r = copy_nat (bi2.abs_value) 0 size_bi2 in
+ (* new_r contains (r, size_bi2) the remainder *)
+ { sign = - bi2.sign;
+ abs_value =
+ (set_digit_nat q (pred size_q) 0;
+ incr_nat q 0 size_q 1;
+ q) },
+ { sign = 1;
abs_value =
- (sub_nat new_r 0 size_bi2 r 0 size_bi2 1;
- new_r) })
- else
- (if bi1_negatif then set_digit_nat q (pred size_q) 0;
- { sign = if is_zero_nat q 0 size_q
- then 0
- else bi1.sign * bi2.sign;
- abs_value = q },
- { sign = if not_null_mod then 1 else 0;
- abs_value = copy_nat r 0 size_bi2 })
+ (sub_nat new_r 0 size_bi2 r 0 size_bi2 1;
+ new_r) })
+ else
+ (if bi1_negatif then set_digit_nat q (pred size_q) 0;
+ { sign = if is_zero_nat q 0 size_q
+ then 0
+ else bi1.sign * bi2.sign;
+ abs_value = q },
+ { sign = if not_null_mod then 1 else 0;
+ abs_value = copy_nat r 0 size_bi2 })
+;;
let div_big_int bi1 bi2 = fst (quomod_big_int bi1 bi2)
and mod_big_int bi1 bi2 = snd (quomod_big_int bi1 bi2)
+;;
let gcd_big_int bi1 bi2 =
let size_bi1 = num_digits_big_int bi1
@@ -288,18 +310,19 @@ let gcd_big_int bi1 bi2 =
abs_value =
match compare_nat (bi1.abs_value) 0 size_bi1
(bi2.abs_value) 0 size_bi2 with
- 0 -> bi1.abs_value
- | 1 ->
- let res = copy_nat (bi1.abs_value) 0 size_bi1 in
- let len =
- gcd_nat res 0 size_bi1 (bi2.abs_value) 0 size_bi2 in
- copy_nat res 0 len
- | _ ->
- let res = copy_nat (bi2.abs_value) 0 size_bi2 in
- let len =
- gcd_nat res 0 size_bi2 (bi1.abs_value) 0 size_bi1 in
- copy_nat res 0 len
- }
+ | 0 -> bi1.abs_value
+ | 1 ->
+ let res = copy_nat (bi1.abs_value) 0 size_bi1 in
+ let len =
+ gcd_nat res 0 size_bi1 (bi2.abs_value) 0 size_bi2 in
+ copy_nat res 0 len
+ | _ ->
+ let res = copy_nat (bi2.abs_value) 0 size_bi2 in
+ let len =
+ gcd_nat res 0 size_bi2 (bi1.abs_value) 0 size_bi1 in
+ copy_nat res 0 len
+ }
+;;
(* Coercion operators *)
@@ -319,29 +342,33 @@ let int_of_big_int bi =
if bi.sign = -1 then - n else n
with Failure _ ->
if eq_big_int bi monster_big_int then monster_int
- else failwith "int_of_big_int";;
+ else failwith "int_of_big_int"
+;;
(* Coercion with nat type *)
let nat_of_big_int bi =
- if bi.sign = -1
+ if bi.sign == -1
then failwith "nat_of_big_int"
else copy_nat (bi.abs_value) 0 (num_digits_big_int bi)
+;;
let sys_big_int_of_nat nat off len =
let length = num_digits_nat nat off len in
- { sign = if is_zero_nat nat off length then 0 else 1;
- abs_value = copy_nat nat off length }
+ { sign = if is_zero_nat nat off length then 0 else 1;
+ abs_value = copy_nat nat off length }
+;;
let big_int_of_nat nat =
sys_big_int_of_nat nat 0 (length_nat nat)
+;;
(* Coercion with string type *)
let string_of_big_int bi =
- if bi.sign = -1
+ if bi.sign == -1
then "-" ^ string_of_nat bi.abs_value
else string_of_nat bi.abs_value
-
+;;
let sys_big_int_of_string_aux s ofs len sgn =
if len < 1 then failwith "sys_big_int_of_string";
@@ -352,13 +379,14 @@ let sys_big_int_of_string_aux s ofs len sgn =
let sys_big_int_of_string s ofs len =
match s.[ofs] with
- | '-' -> sys_big_int_of_string_aux s (ofs+1) (len-1) (-1)
- | '+' -> sys_big_int_of_string_aux s (ofs+1) (len-1) 1
+ | '-' -> sys_big_int_of_string_aux s (ofs + 1) (len - 1) (-1)
+ | '+' -> sys_big_int_of_string_aux s (ofs + 1) (len - 1) 1
| _ -> sys_big_int_of_string_aux s ofs len 1
;;
let big_int_of_string s =
sys_big_int_of_string s 0 (String.length s)
+;;
let power_base_nat base nat off len =
if is_zero_nat nat off len then nat_of_int 1 else
@@ -368,7 +396,7 @@ let power_base_nat base nat off len =
let (x, y) = quomod_big_int (sys_big_int_of_nat nat off len)
(big_int_of_int (succ pmax)) in
(int_of_big_int x, int_of_big_int y) in
- if n = 0 then copy_nat power_base (pred rem) 1 else
+ if n == 0 then copy_nat power_base (pred rem) 1 else
begin
let res = make_nat n
and res2 = make_nat (succ n)
@@ -379,40 +407,41 @@ let power_base_nat base nat off len =
let len = num_digits_nat res 0 n in
let len2 = min n (2 * len) in
let succ_len2 = succ len2 in
- square_nat res2 0 len2 res 0 len;
- begin
- if n land !p > 0
- then (set_to_zero_nat res 0 len;
- mult_digit_nat res 0 succ_len2
- res2 0 len2
- power_base pmax; ())
- else blit_nat res 0 res2 0 len2
- end;
- set_to_zero_nat res2 0 len2;
- p := !p lsr 1
+ square_nat res2 0 len2 res 0 len;
+ begin
+ if n land !p > 0
+ then (set_to_zero_nat res 0 len;
+ mult_digit_nat res 0 succ_len2
+ res2 0 len2
+ power_base pmax;
+ ())
+ else blit_nat res 0 res2 0 len2
+ end;
+ set_to_zero_nat res2 0 len2;
+ p := !p lsr 1
done;
if rem > 0
then (mult_digit_nat res2 0 (succ n)
- res 0 n power_base (pred rem);
+ res 0 n
+ power_base (pred rem);
res2)
else res
end
+;;
let power_int_positive_int i n =
match sign_int n with
- 0 -> unit_big_int
+ | 0 -> unit_big_int
| -1 -> invalid_arg "power_int_positive_int"
| _ -> let nat = power_base_int (abs i) n in
- { sign = if i >= 0
- then sign_int i
- else if n land 1 = 0
- then 1
- else -1;
+ { sign = if i >= 0 then sign_int i else
+ if n land 1 == 0 then 1 else -1;
abs_value = nat}
+;;
let power_big_int_positive_int bi n =
match sign_int n with
- 0 -> unit_big_int
+ | 0 -> unit_big_int
| -1 -> invalid_arg "power_big_int_positive_int"
| _ -> let bi_len = num_digits_big_int bi in
let res_len = bi_len * n in
@@ -425,39 +454,35 @@ let power_big_int_positive_int bi n =
let len = num_digits_nat res 0 res_len in
let len2 = min res_len (2 * len) in
let succ_len2 = succ len2 in
- square_nat res2 0 len2 res 0 len;
- (if n land !p > 0
- then (set_to_zero_nat res 0 len;
- mult_nat res 0 succ_len2
- res2 0 len2 (bi.abs_value) 0 bi_len;
- set_to_zero_nat res2 0 len2)
- else blit_nat res 0 res2 0 len2;
- set_to_zero_nat res2 0 len2);
- p := !p lsr 1
+ square_nat res2 0 len2 res 0 len;
+ (if n land !p > 0
+ then (set_to_zero_nat res 0 len;
+ mult_nat res 0 succ_len2
+ res2 0 len2 (bi.abs_value) 0 bi_len;
+ set_to_zero_nat res2 0 len2)
+ else blit_nat res 0 res2 0 len2;
+ set_to_zero_nat res2 0 len2);
+ p := !p lsr 1
done;
- {sign = if bi.sign >= 0
- then bi.sign
- else if n land 1 = 0
- then 1
- else -1;
+ {sign = if bi.sign >= 0 then bi.sign else
+ if n land 1 == 0 then 1 else -1;
abs_value = res}
+;;
let power_int_positive_big_int i bi =
match sign_big_int bi with
- 0 -> unit_big_int
+ | 0 -> unit_big_int
| -1 -> invalid_arg "power_int_positive_big_int"
- | _ -> let nat = power_base_nat
+ | _ -> let nat = power_base_nat
(abs i) (bi.abs_value) 0 (num_digits_big_int bi) in
- { sign = if i >= 0
- then sign_int i
- else if is_digit_odd (bi.abs_value) 0
- then -1
- else 1;
+ { sign = if i >= 0 then sign_int i else
+ if is_digit_odd (bi.abs_value) 0 then -1 else 1;
abs_value = nat }
+;;
let power_big_int_positive_big_int bi1 bi2 =
match sign_big_int bi2 with
- 0 -> unit_big_int
+ | 0 -> unit_big_int
| -1 -> invalid_arg "power_big_int_positive_big_int"
| _ -> let nat = bi2.abs_value
and off = 0
@@ -486,17 +511,15 @@ let power_big_int_positive_big_int bi1 bi2 =
set_to_zero_nat res2 0 len2);
p := !p lsr 1
done;
- {sign = if bi1.sign >= 0
- then bi1.sign
- else if is_digit_odd (bi2.abs_value) 0
- then -1
- else 1;
+ {sign = if bi1.sign >= 0 then bi1.sign else
+ if is_digit_odd (bi2.abs_value) 0 then -1 else 1;
abs_value = res}
+;;
(* base_power_big_int compute bi*base^n *)
let base_power_big_int base n bi =
match sign_int n with
- 0 -> bi
+ | 0 -> bi
| -1 -> let nat = power_base_int base (-n) in
let len_nat = num_digits_nat nat 0 (length_nat nat)
and len_bi = num_digits_big_int bi in
@@ -529,12 +552,12 @@ let base_power_big_int base n bi =
(bi.abs_value) 0 len_bi)
; if is_zero_nat res 0 new_len
then zero_big_int
- else create_big_int (bi.sign) res
+ else create_big_int (bi.sign) res;;
(* Coercion with float type *)
let float_of_big_int bi =
- float_of_string (string_of_big_int bi)
+ float_of_string (string_of_big_int bi);;
(* XL: suppression de big_int_of_float et nat_of_float. *)
@@ -547,6 +570,7 @@ let sqrt_big_int bi =
| -1 -> invalid_arg "sqrt_big_int"
| _ -> {sign = 1;
abs_value = sqrt_nat (bi.abs_value) 0 (num_digits_big_int bi)}
+;;
let square_big_int bi =
if bi.sign == 0 then zero_big_int else
@@ -555,6 +579,7 @@ let square_big_int bi =
let res = make_nat len_res in
square_nat res 0 len_res (bi.abs_value) 0 len_bi;
{sign = 1; abs_value = res}
+;;
(* round off of the futur last digit (of the integer represented by the string
argument of the function) that is now the previous one.
@@ -563,20 +588,20 @@ let square_big_int bi =
else s <- the round number and the result_int is false *)
let round_futur_last_digit s off_set length =
let l = pred (length + off_set) in
- if Char.code(String.get s l) >= Char.code '5'
+ if int_of_char s.[l] >= int_of_char '5'
then
let rec round_rec l =
- let current_char = String.get s l in
- if current_char = '9'
+ let current_char = s.[l] in
+ if current_char == '9'
then
- (String.set s l '0';
- if l = off_set then true else round_rec (pred l))
- else
- (String.set s l (Char.chr (succ (Char.code current_char)));
+ (s.[l] <- '0';
+ if l == off_set then true else round_rec (pred l))
+ else
+ (s.[l] <- char_of_int (succ (int_of_char current_char));
false)
in round_rec (pred l)
else false
-
+;;
(* Approximation with floating decimal point a` la approx_ratio_exp *)
let approx_big_int prec bi =
@@ -584,20 +609,19 @@ let approx_big_int prec bi =
let n =
max 0
(int_of_big_int (
- add_int_big_int
- (-prec)
- (div_big_int (mult_big_int (big_int_of_int (pred len_bi))
- (big_int_of_string "963295986"))
- (big_int_of_string "100000000")))) in
+ add_int_big_int
+ (- prec)
+ (div_big_int (mult_big_int (big_int_of_int (pred len_bi))
+ (big_int_of_string "963295986"))
+ (big_int_of_string "100000000")))) in
let s =
string_of_big_int (div_big_int bi (power_int_positive_int 10 n)) in
- let (sign, off, len) =
- if String.get s 0 = '-'
- then ("-", 1, succ prec)
- else ("", 0, prec) in
- if (round_futur_last_digit s off (succ prec))
- then (sign^"1."^(String.make prec '0')^"e"^
- (string_of_int (n + 1 - off + String.length s)))
- else (sign^(String.sub s off 1)^"."^
- (String.sub s (succ off) (pred prec))
- ^"e"^(string_of_int (n - succ off + String.length s)))
+ let (sign, off, len) =
+ if s.[0] == '-' then ("-", 1, succ prec) else ("", 0, prec) in
+ if round_futur_last_digit s off (succ prec)
+ then sign ^ "1." ^ String.make prec '0' ^ "e" ^
+ string_of_int (n + 1 - off + String.length s)
+ else sign ^ String.sub s off 1 ^ "." ^
+ String.sub s (succ off) (pred prec) ^ "e" ^
+ string_of_int (n - succ off + String.length s)
+;;
diff --git a/otherlibs/num/int_misc.ml b/otherlibs/num/int_misc.ml
index b7eb4c67d..453fd6303 100644
--- a/otherlibs/num/int_misc.ml
+++ b/otherlibs/num/int_misc.ml
@@ -15,22 +15,22 @@
(* Some extra operations on integers *)
-let rec gcd_int i1 i2 =
- if i2 = 0 then abs i1 else gcd_int i2 (i1 mod i2)
-;;
-
-let rec num_bits_int_aux n =
- if n = 0 then 0 else succ(num_bits_int_aux (n lsr 1));;
-
-let num_bits_int n = num_bits_int_aux (abs n);;
-
-let sign_int i = if i = 0 then 0 else if i > 0 then 1 else -1;;
-
let length_of_int = Sys.word_size - 2;;
let monster_int = 1 lsl length_of_int;;
let biggest_int = monster_int - 1;;
let least_int = - biggest_int;;
+let rec num_bits_int_aux n =
+ if n == 0 then 0 else succ (num_bits_int_aux (n lsr 1));;
+
+let num_bits_int n = num_bits_int_aux (abs n);;
+
+let sign_int i = if i == 0 then 0 else if i > 0 then 1 else -1;;
+
let compare_int n1 n2 =
if n1 == n2 then 0 else if n1 > n2 then 1 else -1;;
+
+let rec gcd_int i1 i2 =
+ if i2 == 0 then abs i1 else gcd_int i2 (i1 mod i2);;
+
diff --git a/otherlibs/threads/Makefile b/otherlibs/threads/Makefile
index 1a5a1b63a..d89fe4b98 100644
--- a/otherlibs/threads/Makefile
+++ b/otherlibs/threads/Makefile
@@ -34,7 +34,8 @@ LIB_OBJS=pervasives.cmo \
$(LIB)/lexing.cmo $(LIB)/parsing.cmo \
$(LIB)/set.cmo $(LIB)/map.cmo $(LIB)/stack.cmo $(LIB)/queue.cmo \
$(LIB)/stream.cmo $(LIB)/buffer.cmo \
- $(LIB)/printf.cmo $(LIB)/format.cmo $(LIB)/arg.cmo \
+ $(LIB)/printf.cmo $(LIB)/format.cmo \
+ $(LIB)/scanning.cmo $(LIB)/scanf.cmo $(LIB)/arg.cmo \
$(LIB)/printexc.cmo $(LIB)/gc.cmo $(LIB)/digest.cmo $(LIB)/random.cmo \
$(LIB)/camlinternalOO.cmo \
$(LIB)/oo.cmo $(LIB)/genlex.cmo $(LIB)/callback.cmo $(LIB)/weak.cmo \