Variable rnd : R -> Z.
Context { valid_rnd : Valid_rnd rnd }.

(* Specifications: *)
Theorem relative_error_FLT :
forall x,
(bpow (emin + prec - 1) <= Rabs x)%R ->
(Rabs (round beta (FLT_exp emin prec) rnd x - x) < bpow (-prec + 1) * Rabs x)%R.
Theorem relative_error_FLX :
forall x,
(x <> 0)%R ->
(Rabs (round beta (FLX_exp prec) rnd x - x) < bpow (-prec + 1) * Rabs x)%R.
Theorem ln_beta_round_ge :
forall x,
round rnd x <> 0%R ->
(ln_beta beta x <= ln_beta beta (round rnd x))%Z.
Theorem generic_round_generic :
forall x,
generic_format fexp1 x ->
generic_format fexp1 (round fexp2 rnd x).
Theorem double_round_mult :
forall (fexp1 fexp2 : Z -> Z),
double_round_mult_hyp fexp1 fexp2 ->
forall x y,
generic_format beta fexp1 x -> generic_format beta fexp1 y ->
round beta fexp1 rnd (round beta fexp2 rnd (x * y))
= round beta fexp1 rnd (x * y).
Theorem relative_error_FLT :
forall x,
(bpow (emin + prec - 1) <= Rabs x)%R ->
(Rabs (round beta (FLT_exp emin prec) rnd x - x) < bpow (-prec + 1) * Rabs x)%R.
Theorem relative_error_FLX :
forall x,
(x <> 0)%R ->
(Rabs (round beta (FLX_exp prec) rnd x - x) < bpow (-prec + 1) * Rabs x)%R.
Theorem ln_beta_round_ge :
forall x,
round rnd x <> 0%R ->
(ln_beta beta x <= ln_beta beta (round rnd x))%Z.
Theorem generic_round_generic :
forall x,
generic_format fexp1 x ->
generic_format fexp1 (round fexp2 rnd x).
Theorem double_round_mult :
forall (fexp1 fexp2 : Z -> Z),
double_round_mult_hyp fexp1 fexp2 ->
forall x y,
generic_format beta fexp1 x -> generic_format beta fexp1 y ->
round beta fexp1 rnd (round beta fexp2 rnd (x * y))
= round beta fexp1 rnd (x * y).