Library FArgReduct4

FArgReduct4 file

Sylvie Boldo

This file explains an improvement of Cody & Waite argument reduction technique using the FMA (fused-multiply-and-add).
Require Export Dekker.
Require Export discriminant3.
Require Export FmaErr.
Require Export FArgReduct3.


Section Total.
Let radix := 2%Z.

Let FtoRradix := FtoR radix.
Coercion FtoRradix : float >-> R.

Variables

Variable b : Fbound.
Variables prec : nat.
Variable N : Z.
Variables alpha gamma x zH1 u gamma2 v res vL t1 t2: float.

Various bounds

Let bmoinsq :=
  Bound
    (P_of_succ_nat (pred (Zabs_nat (Zpower_nat radix (prec - 2)%nat))))
    (dExp b).

All the hypotheses

Hypothesis pGivesBound : Zpos (vNum b) = Zpower_nat radix prec.
Hypothesis Fboundedx : Fbounded b x.
Hypothesis xCanonic : Fcanonic radix b x.
Hypothesis xPos : (0 <= x)%R.

alpha (the constant, such as pi) and gamma (its inverse)
Hypothesis alphaNormal : Fnormal radix b alpha.
Hypothesis gammaNormal : Fnormal radix bmoinsq gamma.
Hypothesis alphaPos : (0 < alpha)%R.
Hypothesis gammaPos : (0 < gamma)%R.
Hypothesis
  gamma_not_pow_2 : forall e : Z, FtoRradix gamma <> powerRZ radix e.
Hypothesis gammaDef : Closest bmoinsq radix (/ alpha) gamma.

About the computation of z
Hypothesis
  uDef :
    Closest b radix
      (3%nat * powerRZ radix (Zpred (Zpred (prec - N))) + x * alpha) u.
Hypothesis
  zH1Def :
    Closest b radix (u - 3%nat * powerRZ radix (Zpred (Zpred (prec - N))))
      zH1.

Hypothesis precMoreThanThree : 5 <= prec.

2^-N is a normal float
Hypothesis N_not_too_big : (N +prec -1 <= dExp b)%Z.

x not too big
Hypothesis
  xalpha_small :
    (x * alpha <=
     powerRZ radix (Zpred (Zpred (prec - N))) - powerRZ radix (- N))%R.

No underflow
Hypothesis gamma_ge: (powerRZ radix (-dExp b+prec+(Zmax (-1) (prec+N-2)))<= gamma)%R.

gamma2 is the lower part of the constant
Hypothesis gamma2Bounded: Fbounded b gamma2.
Hypothesis gamma2_le: (Rabs gamma2 <= powerRZ radix (Fexp gamma))%R.
Hypothesis gamma2_e_eq: (Fexp gamma2 = Fexp gamma - prec+2)%Z.

v is the rounding of z gamma2 and vL the error
Hypothesis vDef : Closest b radix (zH1*gamma2)%R v.
Hypothesis vLDef: (FtoRradix vL=zH1*gamma2-v)%R.
Hypothesis vLBounded: Fbounded b vL.

t1 and t2 are the results of the FTS between v and (x-zH1*gamma)
Hypothesis t1Def: EvenClosest b radix prec (x-zH1*gamma-v)%R t1.
Hypothesis t2Def: (FtoRradix t2=x-zH1*gamma-v-t1)%R.
Hypothesis t2Bounded: Fbounded b t2.

res is the final result
Hypothesis resDef: EvenClosest b radix prec ((x-zH1*gamma)-zH1*gamma2)%R res.

Lemma Zmax_case: forall m n:Z,
   ((n <= m)%Z /\ Zmax m n=m) \/ ((m <= n)%Z /\ Zmax m n=n).

Lemma gamma_ge2: (powerRZ radix (-dExp b+prec+(Zmax (-1) N))<= gamma)%R.

Lemma exp_gamma_enough: (-dExp b <= Fexp gamma-prec-N)%Z.

Theorem Fexp_x_aprox_zh_gamma:
 (0 < zH1)%R ->
 (exists k:Z,
   (powerRZ radix k <= zH1 < powerRZ radix (k+1))%R /\
   (Fexp gamma+k-3 <= Fexp x)%Z /\ (-N <= k <= prec-3-N)%Z
    /\ ((Fexp gamma-N-2 <= Fexp x)%Z \/ (FtoRradix zH1=powerRZ radix (-N))%R)).

Lemma zH_exp_N: exists f:float, (FtoRradix f=zH1)%R /\ Fbounded b f /\ (Fexp f=-N)%Z.

A Fast Two Sum can be used to compute the sum of the first reduced argument and o(zH*gamma2)

Theorem FTS_correct_aux: ((FtoRradix zH1=0)%R\/(FtoRradix v=0)%R)
   \/ exists ff:float,
     FtoRradix ff = (x - zH1 * gamma)%R /\ Fbounded b ff /\
       (Fexp (Fnormalize radix b prec v) <= -N + Fexp gamma -2)%Z /\
       (-N + Fexp gamma -3 <= Fexp ff)%Z /\
       (~(FtoRradix zH1) = powerRZ radix (-N)
            -> (-N + Fexp gamma -2 <= Fexp ff)%Z) /\
       ((FtoRradix zH1) = powerRZ radix (-N)
            -> (Fexp (Fnormalize radix b prec v) <= Fexp ff)%Z).

Theorem FTS_correct: ((FtoRradix zH1=0)%R\/(FtoRradix v=0)%R)
   \/ exists ff:float,
     FtoRradix ff = (x - zH1 * gamma)%R /\ Fbounded b ff /\
       (Fexp (Fnormalize radix b prec v) <= Fexp ff)%Z.

Theorem v_neq_zero: (0 < zH1)%R -> (FtoRradix gamma2<>0)%R -> (FtoRradix v<>0)%R.

Theorem First_Comput_ok: exists f:float,
   (FtoRradix f=t1-res)%R /\ Fbounded b f.

Theorem Second_Comput_ok:
   exists f:float, (FtoRradix f=t1+t2-res)%R /\ Fbounded b f.

Lemma Farg_reduct_bounded_diff: forall (f1 f2 r:float),
   Closest b radix (f1+f2) r
    -> (- dExp b <= Fexp f2)%Z
    -> (Fexp f2 <= Fexp f1)%Z
    -> (Rabs (f1+f2) <= powerRZ radix (2*prec-1+(Fexp f2)))%R
      -> exists g:float, (FtoRradix g=f1+f2-r)%R /\ Fbounded b g.

Theorem OneErrorOnly: ex (fun f : float =>
   FtoRradix f = (x - zH1 * gamma -zH1*gamma2-res)%R /\ Fbounded b f).

End Total.

Section Gamma2Comput.
Let radix := 2%Z.

Let FtoRradix := FtoR radix.
Coercion FtoRradix : float >-> R.

Variables
Variable C : R.
Variable b : Fbound.
Variables prec : nat.
Variables alpha gamma gam2: float.

Various bounds

Let bmoinsq :=
  Bound
    (P_of_succ_nat (pred (Zabs_nat (Zpower_nat radix (prec - 2)%nat))))
    (dExp b).

All the hypotheses

Hypothesis pGivesBound : Zpos (vNum b) = Zpower_nat radix prec.
Hypothesis precMoreThanThree : 3 < prec.
Hypothesis CPos : (0 < C)%R.

Possible algorithm to get alpha and gamma
Hypothesis alphaDef : Closest b radix (/ C) alpha.
Hypothesis gammaDef : Closest bmoinsq radix (/ alpha) gamma.

Hypotheses on alpha and gamma
Hypothesis alphaNormal : Fnormal radix b alpha.
Hypothesis gammaNormal : Fnormal radix bmoinsq gamma.
Hypothesis alphaPos : (0 < alpha)%R.
Hypothesis gammaPos : (0 < gamma)%R.
Hypothesis
  gamma_not_pow_2 : forall e : Z, FtoRradix gamma <> powerRZ radix e.

No Underflow
Hypothesis gamma_ge: (powerRZ radix (-dExp b+prec-1)<= gamma)%R.

Then C-gamma can be rounded in any way, it will be small enough for the preceding theorems to hold. Note it also needs to be chopped

Theorem gamma2_le: (Rabs (C - gamma) <= powerRZ radix (Fexp gamma))%R.
End Gamma2Comput.