Definition binary_round m sx mx ex :=
let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx mz ez loc_Exact.

(* Specifications: *)
Theorem binary_round_correct :
forall m sx mx ex,
let z := binary_round m sx mx ex in
valid_binary z = true /\
let x := F2R (Float radix2 (cond_Zopp sx (Zpos mx)) ex) in
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then
FF2R radix2 z = round radix2 fexp (round_mode m) x /\
is_finite_FF z = true /\
sign_FF z = sx
else
z = binary_overflow m sx.
Theorem binary_round_correct :
forall m sx mx ex,
let z := binary_round m sx mx ex in
valid_binary z = true /\
let x := F2R (Float radix2 (cond_Zopp sx (Zpos mx)) ex) in
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then
FF2R radix2 z = round radix2 fexp (round_mode m) x /\
is_finite_FF z = true /\
sign_FF z = sx
else
z = binary_overflow m sx.