Permalink
| Set Implicit Arguments. | |
| Require Export Shared. | |
| Require Flocq.Appli.Fappli_IEEE Flocq.Appli.Fappli_IEEE_bits. | |
| (**************************************************************) | |
| (** ** Type for number (IEEE floats) *) | |
| Definition number : Type := | |
| Fappli_IEEE_bits.binary64. | |
| (**************************************************************) | |
| (** ** Particular values of numbers *) | |
| (* LATER: find definitions in Flocq *) | |
| Parameter nan : number. | |
| Parameter zero : number. | |
| Parameter neg_zero : number. | |
| Definition one := Fappli_IEEE.binary_normalize 53 1024 eq_refl eq_refl Fappli_IEEE.mode_NE 1 0 false. | |
| Parameter infinity : number. | |
| Parameter neg_infinity : number. | |
| Parameter max_value : number. | |
| Parameter min_value : number. | |
| Parameter pi : number. | |
| Parameter e : number. | |
| Parameter ln2 : number. | |
| (**************************************************************) | |
| (** ** Conversions on numbers *) | |
| (* LATER: implement definitions *) | |
| Parameter from_string : string -> number. | |
| Parameter to_string : number -> string. | |
| (**************************************************************) | |
| (** ** Unary operations on numbers *) | |
| (* LATER: find definitions in Flocq *) | |
| Parameter neg : number -> number. | |
| Parameter floor : number -> number. | |
| Parameter absolute : number -> number. | |
| Parameter sign : number -> number. (* returns arbitrary when x is zero or nan *) | |
| Parameter lt_bool : number -> number -> bool. | |
| (**************************************************************) | |
| (** ** Binary operations on numbers *) | |
| Definition add : number -> number -> number := | |
| Fappli_IEEE_bits.b64_plus Fappli_IEEE.mode_NE. | |
| Parameter sub : number -> number -> number. (* todo: bind *) | |
| Parameter fmod : number -> number -> number. (* todo: bind *) | |
| Definition mult : number -> number -> number := | |
| Fappli_IEEE_bits.b64_mult Fappli_IEEE.mode_NE. | |
| Definition div : number -> number -> number := | |
| Fappli_IEEE_bits.b64_div Fappli_IEEE.mode_NE. | |
| (* Todo: find comparison operator *) | |
| Global Instance number_comparable : Comparable number. | |
| Proof. Admitted. | |
| (**************************************************************) | |
| (** ** Conversions with Int32 *) | |
| Parameter of_int : int -> number. (* LATER: this is quite complex. Should we make it precise? *) | |
| Parameter to_int32 : number -> int. (* Remark: extracted code could, for efficiency reasons, use Ocaml Int32 *) | |
| Parameter to_uint32 : number -> int. | |
| Parameter to_int16 : number -> int. (* currently not used *) | |
| (* LATER: Check that the OCaml extraction is correct. *) | |
| (**************************************************************) | |
| (** Implements the operation that masks all but the 5 least significant bits | |
| of a non-negative number (obtained as the result of to_uint32 *) | |
| Parameter modulo_32 : int -> int. | |
| (** Implements int32 operation *) | |
| Parameter int32_bitwise_not : int -> int. | |
| Parameter int32_bitwise_and : int -> int -> int. | |
| Parameter int32_bitwise_or : int -> int -> int. | |
| Parameter int32_bitwise_xor : int -> int -> int. | |
| Parameter int32_left_shift : int -> int -> int. | |
| Parameter int32_right_shift : int -> int -> int. | |
| Parameter uint32_right_shift : int -> int -> int. | |
| (**************************************************************) | |
| (** ** Int32 related conversion *) |