Notation bpow e := (bpow beta e).(* floating-point format with gradual underflow *)
Definition FLT_format (x : R) :=
  exists f : float beta,
  x = F2R f /\ (Zabs (Fnum f) < Zpower beta prec)%Z /\ (emin <= Fexp f)%Z.Definition FLT_exp e := Zmax (e - prec) emin.(** Properties of the FLT format *)
Global Instance FLT_exp_valid : Valid_exp FLT_exp.

(* Specifications: *)
Theorem generic_format_FLT : forall x, FLT_format x -> generic_format beta FLT_exp x.
Theorem FLT_format_generic : forall x, generic_format beta FLT_exp x -> FLT_format x.
Theorem FLT_format_bpow : forall e, (emin <= e)%Z -> generic_format beta FLT_exp (bpow e).
Theorem FLT_format_satisfies_any : satisfies_any FLT_format.
Theorem canonic_exp_FLT_FLX : forall x, (bpow (emin + prec - 1) <= Rabs x)%R -> canonic_exp beta FLT_exp x = canonic_exp beta (FLX_exp prec) x.
Theorem generic_format_FLT_FLX : forall x : R, (bpow (emin + prec - 1) <= Rabs x)%R -> generic_format beta (FLX_exp prec) x -> generic_format beta FLT_exp x.
Theorem generic_format_FLX_FLT : forall x : R, generic_format beta FLT_exp x -> generic_format beta (FLX_exp prec) x.
Theorem round_FLT_FLX : forall rnd x, (bpow (emin + prec - 1) <= Rabs x)%R -> round beta FLT_exp rnd x = round beta (FLX_exp prec) rnd x.
Theorem canonic_exp_FLT_FIX : forall x, x <> 0%R -> (Rabs x < bpow (emin + prec))%R -> canonic_exp beta FLT_exp x = canonic_exp beta (FIX_exp emin) x.
Theorem generic_format_FIX_FLT : forall x : R, generic_format beta FLT_exp x -> generic_format beta (FIX_exp emin) x.
Theorem generic_format_FLT_FIX : forall x : R, (Rabs x <= bpow (emin + prec))%R -> generic_format beta (FIX_exp emin) x -> generic_format beta FLT_exp x.
Theorem ulp_FLT_small: forall x, (Rabs x < bpow (emin+prec))%R -> ulp beta FLT_exp x = bpow emin.
Theorem ulp_FLT_le : forall x, (bpow (emin + prec - 1) <= Rabs x)%R -> (ulp beta FLT_exp x <= Rabs x * bpow (1 - prec))%R.
Theorem ulp_FLT_gt : forall x, (Rabs x * bpow (-prec) < ulp beta FLT_exp x)%R.
Theorem generic_format_FLT : forall x, FLT_format x -> generic_format beta FLT_exp x.
Theorem FLT_format_generic : forall x, generic_format beta FLT_exp x -> FLT_format x.
Theorem FLT_format_bpow : forall e, (emin <= e)%Z -> generic_format beta FLT_exp (bpow e).
Theorem FLT_format_satisfies_any : satisfies_any FLT_format.
Theorem canonic_exp_FLT_FLX : forall x, (bpow (emin + prec - 1) <= Rabs x)%R -> canonic_exp beta FLT_exp x = canonic_exp beta (FLX_exp prec) x.
Theorem generic_format_FLT_FLX : forall x : R, (bpow (emin + prec - 1) <= Rabs x)%R -> generic_format beta (FLX_exp prec) x -> generic_format beta FLT_exp x.
Theorem generic_format_FLX_FLT : forall x : R, generic_format beta FLT_exp x -> generic_format beta (FLX_exp prec) x.
Theorem round_FLT_FLX : forall rnd x, (bpow (emin + prec - 1) <= Rabs x)%R -> round beta FLT_exp rnd x = round beta (FLX_exp prec) rnd x.
Theorem canonic_exp_FLT_FIX : forall x, x <> 0%R -> (Rabs x < bpow (emin + prec))%R -> canonic_exp beta FLT_exp x = canonic_exp beta (FIX_exp emin) x.
Theorem generic_format_FIX_FLT : forall x : R, generic_format beta FLT_exp x -> generic_format beta (FIX_exp emin) x.
Theorem generic_format_FLT_FIX : forall x : R, (Rabs x <= bpow (emin + prec))%R -> generic_format beta (FIX_exp emin) x -> generic_format beta FLT_exp x.
Theorem ulp_FLT_small: forall x, (Rabs x < bpow (emin+prec))%R -> ulp beta FLT_exp x = bpow emin.
Theorem ulp_FLT_le: forall x, (bpow (emin+prec) <= Rabs x)%R -> (ulp beta FLT_exp x <= Rabs x * bpow (1-prec))%R.
Theorem ulp_FLT_ge: forall x, (Rabs x * bpow (-prec) < ulp beta FLT_exp x)%R.