diff --git a/src/plugins/value/values/numerors/numerors_arithmetics.ml b/src/plugins/value/values/numerors/numerors_arithmetics.ml index 776f7edf3f331d218466e3c50dbb52188d0cb611..d2cea72a638278429245ad9f2e0a44cb05b1f4b4 100644 --- a/src/plugins/value/values/numerors/numerors_arithmetics.ml +++ b/src/plugins/value/values/numerors/numerors_arithmetics.ml @@ -331,16 +331,16 @@ module Exact : Arithmetic with type forward = I.t = struct I.narrow x.exact (I.neg r.exact) let add x y r = [x ; y ; r] >>+ fun _ -> - I.backward_add ~prec:P.Real ~left:x.exact ~right:y.exact ~result:r.exact + I.backward_add ~prec:P.Real ~left:x.exact ~right:y.exact ~result:r.exact () let sub x y r = [x ; y ; r] >>+ fun _ -> - I.backward_sub ~prec:P.Real ~left:x.exact ~right:y.exact ~result:r.exact + I.backward_sub ~prec:P.Real ~left:x.exact ~right:y.exact ~result:r.exact () let mul x y r = [x ; y ; r] >>+ fun _ -> - I.backward_mul ~prec:P.Real ~left:x.exact ~right:y.exact ~result:r.exact + I.backward_mul ~prec:P.Real ~left:x.exact ~right:y.exact ~result:r.exact () let div x y r = [x ; y ; r] >>+ fun _ -> - I.backward_div ~prec:P.Real ~left:x.exact ~right:y.exact ~result:r.exact + I.backward_div ~prec:P.Real ~left:x.exact ~right:y.exact ~result:r.exact () end @@ -378,16 +378,16 @@ module Approx : Arithmetic with type forward = I.t = struct I.narrow x.approx (I.neg r.approx) let add x y r = [x ; y ; r] >>+ fun prec -> - I.backward_add ~prec ~left:x.approx ~right:y.approx ~result:r.approx + I.backward_add ~prec ~left:x.approx ~right:y.approx ~result:r.approx () let sub x y r = [x ; y ; r] >>+ fun prec -> - I.backward_sub ~prec ~left:x.approx ~right:y.approx ~result:r.approx + I.backward_sub ~prec ~left:x.approx ~right:y.approx ~result:r.approx () let mul x y r = [x ; y ; r] >>+ fun prec -> - I.backward_mul ~prec ~left:x.approx ~right:y.approx ~result:r.approx + I.backward_mul ~prec ~left:x.approx ~right:y.approx ~result:r.approx () let div x y r = [x ; y ; r] >>+ fun prec -> - I.backward_div ~prec ~left:x.approx ~right:y.approx ~result:r.approx + I.backward_div ~prec ~left:x.approx ~right:y.approx ~result:r.approx () end diff --git a/src/plugins/value/values/numerors/numerors_interval.ml b/src/plugins/value/values/numerors/numerors_interval.ml index 7f1e0f63bf46db8409b8cec9ab3b9d09e114a71b..1354d6dbc46e113752f2f544a75048de7653ca65 100644 --- a/src/plugins/value/values/numerors/numerors_interval.ml +++ b/src/plugins/value/values/numerors/numerors_interval.ml @@ -441,7 +441,7 @@ let finite_values ~prec = function let max = F.min (F.maximal_pos_float prec) y in if max < min then None else Some (min, max) -let backward_op (op : operator) fnan ?(prec = Precisions.Real) value result = +let backward_op (op : operator) fnan ?(prec = Precisions.Real) value result () = if contains_infinity result || (contains_nan value && contains_nan result) then `Value (top prec) else @@ -471,7 +471,7 @@ let synthetize left right = | `Value left, `Value right -> `Value (left, right) [@@inline] -let backward_add ?(prec = Precisions.Real) ~left ~right ~result = +let backward_add ?(prec = Precisions.Real) ~left ~right ~result () = let reduce_for_nan value = match contains_pos_infinity value, contains_neg_infinity value with | true , true -> I (F.neg_inf prec, F.pos_inf prec, true) @@ -479,38 +479,38 @@ let backward_add ?(prec = Precisions.Real) ~left ~right ~result = | false, true -> I (F.pos_inf prec, F.pos_inf prec, true) | false, false -> NaN prec in - let right' = backward_op F.sub reduce_for_nan ~prec left result in - let left' = backward_op F.sub reduce_for_nan ~prec right result in + let right' = backward_op F.sub reduce_for_nan ~prec left result () in + let left' = backward_op F.sub reduce_for_nan ~prec right result () in synthetize left' right' -let backward_sub ?(prec = Precisions.Real) ~left ~right ~result = - match backward_add ~prec ~left ~right:(neg right) ~result with +let backward_sub ?(prec = Precisions.Real) ~left ~right ~result () = + match backward_add ~prec ~left ~right:(neg right) ~result () with | `Bottom -> `Bottom | `Value (left, right) -> `Value (left, neg right) -let backward_mul ?(prec = Precisions.Real) ~left ~right ~result = +let backward_mul ?(prec = Precisions.Real) ~left ~right ~result () = let reduce_for_nan value = match contains_infinity value, contains_a_zero value with | true, _ | _, true -> I (F.neg_inf prec, F.pos_inf prec, true) | false, false -> NaN prec in - let right' = backward_op F.div reduce_for_nan ~prec left result in - let left' = backward_op F.div reduce_for_nan ~prec right result in + let right' = backward_op F.div reduce_for_nan ~prec left result () in + let left' = backward_op F.div reduce_for_nan ~prec right result () in synthetize left' right' -let backward_div ?(prec = Precisions.Real) ~left ~right ~result = +let backward_div ?(prec = Precisions.Real) ~left ~right ~result () = let reduce_for_nan value = match contains_infinity value, contains_a_zero value with | true, _ | _, true -> I (F.neg_inf prec, F.pos_inf prec, true) | false, false -> NaN prec in let right' = - match backward_op F.div reduce_for_nan ~prec left result with + match backward_op F.div reduce_for_nan ~prec left result () with | `Value right' -> let one = F.of_int ~prec 1 in let one = I (one, one, false) in `Value (div ~prec one right') | `Bottom -> `Bottom in - let left' = backward_op F.div reduce_for_nan ~prec right result in + let left' = backward_op F.div reduce_for_nan ~prec right result () in synthetize left' right' diff --git a/src/plugins/value/values/numerors/numerors_interval.mli b/src/plugins/value/values/numerors/numerors_interval.mli index badb0a2d25a77c3ae4f863831264060c0277beb9..1a4ea5b7545af36c81d6bbc522fe825b513ae68c 100644 --- a/src/plugins/value/values/numerors/numerors_interval.mli +++ b/src/plugins/value/values/numerors/numerors_interval.mli @@ -182,10 +182,10 @@ val backward_gt : ?prec:Precisions.t -> t -> t -> t Bottom.or_bottom (** These functions perform backward propagation for arithmetic *) val backward_add : ?prec:Precisions.t -> left:t -> right:t -> - result:t -> (t * t) Bottom.or_bottom + result:t -> unit -> (t * t) Bottom.or_bottom val backward_sub : ?prec:Precisions.t -> left:t -> right:t -> - result:t -> (t * t) Bottom.or_bottom + result:t -> unit -> (t * t) Bottom.or_bottom val backward_mul : ?prec:Precisions.t -> left:t -> right:t -> - result:t -> (t * t) Bottom.or_bottom + result:t -> unit -> (t * t) Bottom.or_bottom val backward_div : ?prec:Precisions.t -> left:t -> right:t -> - result:t -> (t * t) Bottom.or_bottom + result:t -> unit -> (t * t) Bottom.or_bottom