From 3b36bd818ffc20f7a455da46a89641c02491a4e1 Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Mon, 24 Jan 2022 10:02:43 +0100 Subject: progress --- kvx/FPDivision64.v | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'kvx') diff --git a/kvx/FPDivision64.v b/kvx/FPDivision64.v index 8d40e88e..6894460f 100644 --- a/kvx/FPDivision64.v +++ b/kvx/FPDivision64.v @@ -1116,7 +1116,7 @@ Lemma step2_real_div_long_smalla_correct : (b_NOT0 : (0 < Int64.unsigned b)%Z), exists (q : float), (step2_real_div_long (Vlong a) (Vlong b)) = Vfloat q /\ - (Rabs ((B2R _ _ q) - (IZR (Int64.signed a)) / (IZR (Int64.unsigned b))) < (1/2))%R. + (Rabs ((B2R _ _ q) - (IZR (Int64.signed a)) / (IZR (Int64.unsigned b))) <= (255/256))%R. Proof. intros. unfold step2_real_div_long. @@ -1167,8 +1167,22 @@ Proof. cbn in C2. destruct C2 as (C2R & C2F & _). rewrite C2R. - admit. -Admitted. + replace (IZR a' * (B2R 53 1024 f))%R with + ((IZR a'/IZR b') * ((IZR b' * B2R 53 1024 f - 1) + 1))%R ; cycle 1. + { field. lra. } + set (delta1 := (IZR b' * B2R 53 1024 f - 1)%R) in *. + set (q1 := (IZR a' / IZR b' * (delta1 + 1))%R). + replace (rd q1) with (((rd q1) - q1) + q1)%R by ring. + set (delta2 := ((rd q1) - q1)%R). + unfold q1. + replace (delta2 + IZR a' / IZR b' * (delta1 + 1) - IZR a' / IZR b')%R with + (delta2 + (IZR a' / IZR b') * delta1)%R by ring. + unfold delta2. + unfold q1. + unfold approx_inv_rel_thresh in *. + unfold smalla_thresh in *. + gappa. +Qed. Definition step2_div_long' a b := Val.maketotal (Val.longuoffloat_ne (step2_real_div_long a b)). -- cgit