diff options
-rw-r--r-- | otherlibs/num/Makefile | 2 | ||||
-rw-r--r-- | otherlibs/num/big_int.ml | 73 | ||||
-rw-r--r-- | otherlibs/num/nat.ml | 35 | ||||
-rw-r--r-- | otherlibs/num/num.ml | 6 | ||||
-rw-r--r-- | otherlibs/num/ratio.ml | 28 |
5 files changed, 73 insertions, 71 deletions
diff --git a/otherlibs/num/Makefile b/otherlibs/num/Makefile index 080ffdeb7..8a561e888 100644 --- a/otherlibs/num/Makefile +++ b/otherlibs/num/Makefile @@ -24,7 +24,7 @@ CFLAGS=-O -I../../byterun $(BYTECCCOMPOPTS) $(SHAREDCCCOMPOPTS) \ CAMLC=../../ocamlcomp.sh CAMLOPT=../../ocamlcompopt.sh MKLIB=../../boot/ocamlrun ../../tools/ocamlmklib -COMPFLAGS=-w s -warn-error A +COMPFLAGS=-warn-error A CAMLOBJS=int_misc.cmo nat.cmo big_int.cmo arith_flags.cmo \ ratio.cmo num.cmo arith_status.cmo diff --git a/otherlibs/num/big_int.ml b/otherlibs/num/big_int.ml index ddd5d7313..0381f466e 100644 --- a/otherlibs/num/big_int.ml +++ b/otherlibs/num/big_int.ml @@ -88,7 +88,7 @@ let pred_big_int 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; + ignore (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 @@ -96,7 +96,7 @@ let pred_big_int bi = 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; + ignore (incr_nat copy_bi 0 size_res 1); { sign = -1; abs_value = copy_bi } @@ -105,7 +105,7 @@ let succ_big_int 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; + ignore (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 @@ -113,7 +113,7 @@ let succ_big_int bi = 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; + ignore (incr_nat copy_bi 0 size_res 1); { sign = 1; abs_value = copy_bi } @@ -129,14 +129,15 @@ let add_big_int bi1 bi2 = -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; + ignore + (add_nat res 0 (succ size_bi2) + (bi1.abs_value) 0 size_bi1 0); res) |_ -> 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; + ignore (add_nat res 0 (succ size_bi1) + (bi2.abs_value) 0 size_bi2 0); res)} else (* Subtract absolute values if signs are different *) @@ -146,14 +147,14 @@ let add_big_int bi1 bi2 = | 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; + (ignore (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; + (ignore (sub_nat res 0 size_bi2 + (bi1.abs_value) 0 size_bi1 1); res) } (* Coercion with int type *) @@ -163,7 +164,7 @@ let big_int_of_int i = let res = (create_nat 1) in (if i = monster_int then (set_digit_nat res 0 biggest_int; - incr_nat res 0 1 1; ()) + ignore (incr_nat res 0 1 1)) else set_digit_nat res 0 (abs i)); res } @@ -179,13 +180,13 @@ let mult_int_big_int i bi = then let res = create_nat size_res in blit_nat res 0 (bi.abs_value) 0 size_bi; set_digit_nat res size_bi 0; - mult_digit_nat res 0 size_res (bi.abs_value) 0 size_bi - (nat_of_int biggest_int) 0; + ignore (mult_digit_nat res 0 size_res (bi.abs_value) 0 size_bi + (nat_of_int biggest_int) 0); { sign = - (sign_big_int bi); abs_value = res } else let res = make_nat (size_res) in - mult_digit_nat res 0 size_res (bi.abs_value) 0 size_bi - (nat_of_int (abs i)) 0; + ignore (mult_digit_nat res 0 size_res (bi.abs_value) 0 size_bi + (nat_of_int (abs i)) 0); { sign = (sign_int i) * (sign_big_int bi); abs_value = res } @@ -197,10 +198,10 @@ let mult_big_int bi1 bi2 = { 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) } + then (ignore (mult_nat res 0 size_res (bi2.abs_value) 0 size_bi2 + (bi1.abs_value) 0 size_bi1);res) + else (ignore (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 = @@ -260,10 +261,10 @@ let quomod_big_int bi1 bi2 = (* 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) }, + ignore (incr_nat q 0 size_q 1); q) }, { sign = 1; abs_value = - (sub_nat new_r 0 size_bi2 r 0 size_bi2 1; + (ignore (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; @@ -380,21 +381,20 @@ 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; + ignore (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; ()) + ignore (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); + then (ignore (mult_digit_nat res2 0 (succ n) + res 0 n power_base (pred rem)); res2) else res end @@ -426,11 +426,11 @@ 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; + ignore (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; + ignore (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); @@ -475,14 +475,14 @@ let power_big_int_positive_big_int bi1 bi2 = 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; + ignore (square_nat res2 0 len2 res 0 len); land_digit_nat nat 0 (nat_of_int !p) 0; if is_zero_nat nat 0 len_bi2 then (blit_nat res 0 res2 0 len2; set_to_zero_nat res2 0 len2) else (set_to_zero_nat res 0 len; - mult_nat res 0 succ_len2 - res2 0 len2 (bi1.abs_value) 0 bi1_len; + ignore (mult_nat res 0 succ_len2 + res2 0 len2 (bi1.abs_value) 0 bi1_len); set_to_zero_nat res2 0 len2); p := !p lsr 1 done; @@ -520,6 +520,7 @@ let base_power_big_int base n bi = and len_bi = num_digits_big_int bi in let new_len = len_bi + len_nat in let res = make_nat new_len in + ignore (if len_bi > len_nat then mult_nat res 0 new_len (bi.abs_value) 0 len_bi @@ -553,7 +554,7 @@ let square_big_int bi = let len_bi = num_digits_big_int bi in let len_res = 2 * len_bi in let res = make_nat len_res in - square_nat res 0 len_res (bi.abs_value) 0 len_bi; + ignore (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 diff --git a/otherlibs/num/nat.ml b/otherlibs/num/nat.ml index dcfb4c505..a77bc2072 100644 --- a/otherlibs/num/nat.ml +++ b/otherlibs/num/nat.ml @@ -229,7 +229,7 @@ let sqrt_nat rad off len = div_nat next_cand 0 rad_len cand 0 cand_len; (* next_cand (poids fort) <- next_cand (poids fort) + cand, i.e. next_cand <- cand + rad / cand *) - add_nat next_cand cand_len cand_rest cand 0 cand_len 0; + ignore (add_nat next_cand cand_len cand_rest cand 0 cand_len 0); (* next_cand <- next_cand / 2 *) shift_right_nat next_cand cand_len cand_rest a_1 0 1; if lt_nat next_cand cand_len cand_rest cand 0 cand_len then @@ -245,9 +245,9 @@ let power_base_max = make_nat 2;; match length_of_digit with | 64 -> set_digit_nat power_base_max 0 (Int64.to_int 1000000000000000000L); - mult_digit_nat power_base_max 0 2 - power_base_max 0 1 (nat_of_int 9) 0; - () + ignore + (mult_digit_nat power_base_max 0 2 + power_base_max 0 1 (nat_of_int 9) 0) | 32 -> set_digit_nat power_base_max 0 1000000000 | _ -> assert false ;; @@ -327,9 +327,10 @@ let make_power_base base power_base = and j = ref 0 in set_digit_nat power_base 0 base; while incr i; is_digit_zero power_base !i do - mult_digit_nat power_base !i 2 - power_base (pred !i) 1 - power_base 0 + ignore + (mult_digit_nat power_base !i 2 + power_base (pred !i) 1 + power_base 0) done; while !j <= !i && is_digit_int power_base !j do incr j done; (!i - 2, !j) @@ -373,21 +374,21 @@ let power_base_int base i = let len = num_digits_nat res 0 newn in let len2 = min n (2 * len) in let succ_len2 = succ len2 in - square_nat res2 0 len2 res 0 len; + ignore (square_nat res2 0 len2 res 0 len); if n land !p > 0 then begin set_to_zero_nat res 0 len; - mult_digit_nat res 0 succ_len2 - res2 0 len2 - power_base pmax; - () + ignore + (mult_digit_nat res 0 succ_len2 + res2 0 len2 power_base pmax) end else blit_nat res 0 res2 0 len2; set_to_zero_nat res2 0 len2; p := !p lsr 1 done; if rem > 0 then begin - mult_digit_nat res2 0 newn - res 0 n power_base (pred rem); + ignore + (mult_digit_nat res2 0 newn + res 0 n power_base (pred rem)); res2 end else res end else @@ -547,9 +548,9 @@ let sys_nat_of_string base s off len = for j = 1 to erase_len do set_digit_nat nat1 j 0 done; - mult_digit_nat nat1 0 !possible_len - nat2 0 !current_len - power_base (pred !digits_read); + ignore + (mult_digit_nat nat1 0 !possible_len + nat2 0 !current_len power_base (pred !digits_read)); blit_nat nat2 0 nat1 0 !possible_len; current_len := num_digits_nat nat1 0 !possible_len; possible_len := min !new_len (succ !current_len); diff --git a/otherlibs/num/num.ml b/otherlibs/num/num.ml index 3d53aefdf..ce0d83f52 100644 --- a/otherlibs/num/num.ml +++ b/otherlibs/num/num.ml @@ -32,11 +32,11 @@ let num_of_big_int bi = else Big_int bi let numerator_num = function - Ratio r -> normalize_ratio r; num_of_big_int (numerator_ratio r) + Ratio r -> ignore (normalize_ratio r); num_of_big_int (numerator_ratio r) | n -> n let denominator_num = function - Ratio r -> normalize_ratio r; num_of_big_int (denominator_ratio r) + Ratio r -> ignore (normalize_ratio r); num_of_big_int (denominator_ratio r) | n -> Int 1 let normalize_num = function @@ -50,7 +50,7 @@ let cautious_normalize_num_when_printing n = if (!normalize_ratio_when_printing_flag) then (normalize_num n) else n let num_of_ratio r = - normalize_ratio r; + ignore (normalize_ratio r); if not (is_integer_ratio r) then Ratio r else if is_int_big_int (numerator_ratio r) then Int (int_of_big_int (numerator_ratio r)) diff --git a/otherlibs/num/ratio.ml b/otherlibs/num/ratio.ml index 3e86d84c1..3ee228a6a 100644 --- a/otherlibs/num/ratio.ml +++ b/otherlibs/num/ratio.ml @@ -143,13 +143,13 @@ let minus_ratio r = normalized = r.normalized } let add_int_ratio i r = - cautious_normalize_ratio r; + ignore (cautious_normalize_ratio r); { numerator = add_big_int (mult_int_big_int i r.denominator) r.numerator; denominator = r.denominator; normalized = r.normalized } let add_big_int_ratio bi r = - cautious_normalize_ratio r; + ignore (cautious_normalize_ratio r); { numerator = add_big_int (mult_big_int bi r.denominator) r.numerator ; denominator = r.denominator; normalized = r.normalized } @@ -213,7 +213,7 @@ let mult_big_int_ratio bi r = normalized = false } let square_ratio r = - cautious_normalize_ratio r; + ignore (cautious_normalize_ratio r); { numerator = square_big_int r.numerator; denominator = square_big_int r.denominator; normalized = r.normalized } @@ -239,13 +239,13 @@ let integer_ratio r = (* Floor of a rational number *) (* Always less or equal to r *) let floor_ratio r = - verify_null_denominator r; + ignore (verify_null_denominator r); div_big_int (r.numerator) r.denominator (* Round of a rational number *) (* Odd function, 1/2 -> 1 *) let round_ratio r = - verify_null_denominator r; + ignore (verify_null_denominator r); let abs_num = abs_big_int r.numerator in let bi = div_big_int abs_num r.denominator in report_sign_ratio r @@ -266,8 +266,8 @@ let ceiling_ratio r = (* Comparison operators on rational numbers *) let eq_ratio r1 r2 = - normalize_ratio r1; - normalize_ratio r2; + ignore (normalize_ratio r1); + ignore (normalize_ratio r2); eq_big_int (r1.numerator) r2.numerator && eq_big_int (r1.denominator) r2.denominator @@ -306,7 +306,7 @@ let eq_big_int_ratio bi r = (is_integer_ratio r) && eq_big_int bi r.numerator let compare_big_int_ratio bi r = - normalize_ratio r; + ignore (normalize_ratio r); if (verify_null_denominator r) then -(sign_big_int r.numerator) else compare_big_int (mult_big_int bi r.denominator) r.numerator @@ -336,7 +336,7 @@ let ratio_of_nat nat = normalized = true } and nat_of_ratio r = - normalize_ratio r; + ignore (normalize_ratio r); if not (is_integer_ratio r) then failwith "nat_of_ratio" else if sign_big_int r.numerator > -1 then @@ -348,20 +348,20 @@ let ratio_of_big_int bi = { numerator = bi; denominator = unit_big_int; normalized = true } and big_int_of_ratio r = - normalize_ratio r; + ignore (normalize_ratio r); if is_integer_ratio r then r.numerator else failwith "big_int_of_ratio" let div_int_ratio i r = - verify_null_denominator r; + ignore (verify_null_denominator r); mult_int_ratio i (inverse_ratio r) let div_ratio_int r i = div_ratio r (ratio_of_int i) let div_big_int_ratio bi r = - verify_null_denominator r; + ignore (verify_null_denominator r); mult_big_int_ratio bi (inverse_ratio r) let div_ratio_big_int r bi = @@ -392,7 +392,7 @@ let rec only_zeros s i lim = (* Nota : for a big_int we have msd_ratio = nums_digits_big_int -1 *) let msd_ratio r = - cautious_normalize_ratio r; + ignore (cautious_normalize_ratio r); if null_denominator r then failwith_zero "msd_ratio" else if sign_big_int r.numerator == 0 then 0 else begin @@ -542,7 +542,7 @@ let float_of_rational_string r = (* Coercions with type string *) let string_of_ratio r = - cautious_normalize_ratio_when_printing r; + ignore (cautious_normalize_ratio_when_printing r); if !approx_printing_flag then float_of_rational_string r else string_of_big_int r.numerator ^ "/" ^ string_of_big_int r.denominator |