Library FexpDiv
Require Export AllFloat.
Section Div.
Variables wi wi1 qi D N qi1 wi2 ai bi eps1 eps2 eps3 ep : R.
Hypothesis Hw : wi = (wi1 - qi * D)%R :>R.
Hypothesis Ha : (Rabs (/ wi1 * (ai - wi1)) <= eps1)%R.
Hypothesis Hb : (Rabs (/ D * (bi - D)) <= eps2)%R.
Hypothesis Hq : (Rabs (/ (/ bi * ai) * (qi - / bi * ai)) <= eps3)%R.
Hypothesis NZwi : wi1 <> 0%R.
Hypothesis NZD : D <> 0%R.
Hypothesis NZbi : bi <> 0%R.
Hypothesis NZai : ai <> 0%R.
Hypothesis PosEps1 : (0 <= eps1)%R.
Hypothesis PosEps2 : (0 <= eps2)%R.
Hypothesis PosEps3 : (0 <= eps3)%R.
Hypothesis LeEps1 : (eps1 < 1)%R.
Hypothesis LeEps2 : (eps2 < 1)%R.
Hypothesis LeEps3 : (eps3 < 1)%R.
Hypothesis Hep : ep = Rmax (Rmax eps1 eps2) eps3 :>R.
Theorem InegAbsInf :
forall x y eps : R,
x <> 0%R ->
(Rabs (/ x * (y - x)) <= eps)%R -> (Rabs y <= (1 + eps) * Rabs x)%R.
Theorem InegAbsSup :
forall x y eps : R,
x <> 0%R ->
(Rabs (/ x * (y - x)) <= eps)%R -> ((1 - eps) * Rabs x <= Rabs y)%R.
Theorem DivFirstCase :
((Rabs wi1 - Rabs (qi * D)) * / Rabs wi1 <=
1 - (1 - eps3) * (1 - eps1) * / (1 + eps2))%R.
Theorem DivSecondCase :
((Rabs (qi * D) - Rabs wi1) * / Rabs wi1 <=
(1 + eps3) * (1 + eps1) * / (1 - eps2) - 1)%R.
Definition dsd (x y : R) :=
(0 <= x)%R /\ (0 <= y)%R \/ (x <= 0)%R /\ (y <= 0)%R.
Theorem dsdAbs :
forall x y : R, dsd x y -> Rabs (x - y) = Rabs (Rabs x - Rabs y).
Theorem dsdsym : forall x y : R, dsd x y -> dsd y x.
Theorem Inegdsd :
forall x y eps : R,
x <> 0%R -> (eps < 1)%R -> (Rabs (/ x * (y - x)) <= eps)%R -> dsd x y.
Theorem dsdtrans :
forall x y z : R, dsd x y -> dsd y z -> y <> 0%R -> dsd x z.
Theorem dsdinv : forall x y : R, dsd x y -> y <> 0%R -> dsd x (/ y).
Theorem dsdmult : forall x y r : R, dsd x y -> dsd (r * x) (r * y).
Theorem dsdwi1qiD : dsd wi1 (qi * D).
Theorem Maxwiwi1 :
(Rabs wi * / Rabs wi1 <=
Rmax (1 - (1 - eps3) * (1 - eps1) * / (1 + eps2))
((1 + eps3) * (1 + eps1) * / (1 - eps2) - 1))%R.
Theorem Rmax_simpl1 : forall p q : R, (p <= q)%R -> Rmax p q = q.
Theorem RmaxProp :
forall (P : R -> Prop) (x y : R), P x -> P y -> P (Rmax x y).
Theorem FexpEpsilon_aux :
((0 <= ep)%R /\ (ep < 1)%R) /\
(eps1 <= ep)%R /\ (eps2 <= ep)%R /\ (eps3 <= ep)%R.
Theorem FexpDivConv :
(Rabs wi * / Rabs wi1 <= (ep + (ep + (ep + ep * ep))) * / (1 - ep))%R.
End Div.
Section Div2.
Variable b : Fbound.
Variable radix : Z.
Variable precision : nat.
Coercion Local FtoRradix := FtoR radix.
Hypothesis radixMoreThanOne : (1 < radix)%Z.
Hypothesis precisionGreaterThanOne : 1 < precision.
Hypothesis pGivesBound : Zpos (vNum b) = Zpower_nat radix precision.
Theorem FulpDiv :
forall x y p : float,
Fbounded b x ->
Fbounded b y ->
Fbounded b p ->
Closest b radix (x * / y) p ->
y <> 0%R :>R ->
Fnormal radix b (Fnormalize radix b precision x) ->
(Fulp b radix precision x * / Rabs y <= radix * Fulp b radix precision p)%R.
End Div2.