Module Fcore_FLT
Floating-point format with gradual underflow
Require Import Fcore_Raux.
Require Import Fcore_defs.
Require Import Fcore_rnd.
Require Import Fcore_generic_fmt.
Require Import Fcore_float_prop.
Require Import Fcore_FLX.
Require Import Fcore_FIX.
Require Import Fcore_rnd_ne.
Section RND_FLT.
Variable beta :
radix.
Notation bpow e := (
bpow beta e).
Variable emin prec :
Z.
Context {
prec_gt_0_ :
Prec_gt_0 prec }.
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.
Proof.
intros k.
unfold FLT_exp.
generalize (
prec_gt_0 prec).
repeat split ;
intros ;
zify ;
omega.
Qed.
Theorem generic_format_FLT :
forall x,
FLT_format x ->
generic_format beta FLT_exp x.
Proof.
Theorem FLT_format_generic :
forall x,
generic_format beta FLT_exp x ->
FLT_format x.
Proof.
Theorem FLT_format_satisfies_any :
satisfies_any FLT_format.
Proof.
Theorem canonic_exp_FLT_FLX :
forall x,
x <>
R0 ->
(
bpow (
emin +
prec - 1) <=
Rabs x)%
R ->
canonic_exp beta FLT_exp x =
canonic_exp beta (
FLX_exp prec)
x.
Proof.
Links between FLT and FLX
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.
Proof.
Theorem generic_format_FLX_FLT :
forall x :
R,
generic_format beta FLT_exp x ->
generic_format beta (
FLX_exp prec)
x.
Proof.
clear prec_gt_0_.
intros x Hx.
unfold generic_format in Hx;
rewrite Hx.
apply generic_format_F2R.
intros _.
rewrite <-
Hx.
unfold canonic_exp,
FLX_exp,
FLT_exp.
apply Zle_max_l.
Qed.
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.
intros rnd x Hx.
unfold round,
scaled_mantissa.
rewrite canonic_exp_FLT_FLX ;
trivial.
contradict Hx.
rewrite Hx,
Rabs_R0.
apply Rlt_not_le.
apply bpow_gt_0.
Qed.
Links between FLT and FIX (underflow)
Theorem canonic_exp_FLT_FIX :
forall x, x <> R0 ->
(Rabs x < bpow (emin + prec))%R ->
canonic_exp beta FLT_exp x = canonic_exp beta (FIX_exp emin) x.
Proof.
Theorem generic_format_FIX_FLT :
forall x : R,
generic_format beta FLT_exp x ->
generic_format beta (FIX_exp emin) x.
Proof.
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.
Proof with
FLT is a nice format: it has a monotone exponent...
Global Instance FLT_exp_monotone : Monotone_exp FLT_exp.
Proof.
intros ex ey.
unfold FLT_exp.
zify ; omega.
Qed.
and it allows a rounding to nearest, ties to even.
Hypothesis NE_prop : Zeven beta = false \/ (1 < prec)%Z.
Global Instance exists_NE_FLT : Exists_NE beta FLT_exp.
Proof.
End RND_FLT.