From 5e73ef8fea9aa9fa6590daa668a95b05f2b66cc1 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 20 Jun 2018 19:59:17 +0200 Subject: [PATCH] Protocol environment / Pervasives: remove floating-point arithmetic Also remove string conversion functions for float. --- .../sigs/v1/pervasives.mli | 170 +----------------- 1 file changed, 2 insertions(+), 168 deletions(-) diff --git a/src/lib_protocol_environment/sigs/v1/pervasives.mli b/src/lib_protocol_environment/sigs/v1/pervasives.mli index 6e39888d4..b4b269651 100644 --- a/src/lib_protocol_environment/sigs/v1/pervasives.mli +++ b/src/lib_protocol_environment/sigs/v1/pervasives.mli @@ -18,7 +18,8 @@ * Import version 4.06.1 * Remove [channel], [exit], ... * Remove polymorphic comparisons - * Remove non IEEE754-standardized functions on floats + * Remove floating-point arithmetic + * Remove string conversion functions for float * Remove deprecated functions *) @@ -257,148 +258,6 @@ external ( asr ) : int -> int -> int = "%asrint" Right-associative operator at precedence level 8/11. *) -(** {1 Floating-point arithmetic} - - OCaml's floating-point numbers follow the - IEEE 754 standard, using double precision (64 bits) numbers. - Floating-point operations never raise an exception on overflow, - underflow, division by zero, etc. Instead, special IEEE numbers - are returned as appropriate, such as [infinity] for [1.0 /. 0.0], - [neg_infinity] for [-1.0 /. 0.0], and [nan] ('not a number') - for [0.0 /. 0.0]. These special numbers then propagate through - floating-point computations as expected: for instance, - [1.0 /. infinity] is [0.0], and any arithmetic operation with [nan] - as argument returns [nan] as result. -*) - -external ( ~-. ) : float -> float = "%negfloat" -(** Unary negation. You can also write [-. e] instead of [~-. e]. - Unary operator at precedence level 9/11 for [-. e] - and 11/11 for [~-. e]. *) - -external ( ~+. ) : float -> float = "%identity" -(** Unary addition. You can also write [+. e] instead of [~+. e]. - Unary operator at precedence level 9/11 for [+. e] - and 11/11 for [~+. e]. - @since 3.12.0 -*) - -external ( +. ) : float -> float -> float = "%addfloat" -(** Floating-point addition. - Left-associative operator at precedence level 6/11. *) - -external ( -. ) : float -> float -> float = "%subfloat" -(** Floating-point subtraction. - Left-associative operator at precedence level 6/11. *) - -external ( *. ) : float -> float -> float = "%mulfloat" -(** Floating-point multiplication. - Left-associative operator at precedence level 7/11. *) - -external ( /. ) : float -> float -> float = "%divfloat" -(** Floating-point division. - Left-associative operator at precedence level 7/11. *) - -external ceil : float -> float = "caml_ceil_float" "ceil" -[@@unboxed] [@@noalloc] -(** Round above to an integer value. - [ceil f] returns the least integer value greater than or equal to [f]. - The result is returned as a float. *) - -external floor : float -> float = "caml_floor_float" "floor" -[@@unboxed] [@@noalloc] -(** Round below to an integer value. - [floor f] returns the greatest integer value less than or - equal to [f]. - The result is returned as a float. *) - -external abs_float : float -> float = "%absfloat" -(** [abs_float f] returns the absolute value of [f]. *) - -external copysign : float -> float -> float - = "caml_copysign_float" "caml_copysign" -[@@unboxed] [@@noalloc] -(** [copysign x y] returns a float whose absolute value is that of [x] - and whose sign is that of [y]. If [x] is [nan], returns [nan]. - If [y] is [nan], returns either [x] or [-. x], but it is not - specified which. - @since 4.00.0 *) - -external mod_float : float -> float -> float = "caml_fmod_float" "fmod" -[@@unboxed] [@@noalloc] -(** [mod_float a b] returns the remainder of [a] with respect to - [b]. The returned value is [a -. n *. b], where [n] - is the quotient [a /. b] rounded towards zero to an integer. *) - -external frexp : float -> float * int = "caml_frexp_float" -(** [frexp f] returns the pair of the significant - and the exponent of [f]. When [f] is zero, the - significant [x] and the exponent [n] of [f] are equal to - zero. When [f] is non-zero, they are defined by - [f = x *. 2 ** n] and [0.5 <= x < 1.0]. *) - - -external ldexp : (float [@unboxed]) -> (int [@untagged]) -> (float [@unboxed]) = - "caml_ldexp_float" "caml_ldexp_float_unboxed" [@@noalloc] -(** [ldexp x n] returns [x *. 2 ** n]. *) - -external modf : float -> float * float = "caml_modf_float" -(** [modf f] returns the pair of the fractional and integral - part of [f]. *) - -external float : int -> float = "%floatofint" -(** Same as {!Pervasives.float_of_int}. *) - -external float_of_int : int -> float = "%floatofint" -(** Convert an integer to floating-point. *) - -external truncate : float -> int = "%intoffloat" -(** Same as {!Pervasives.int_of_float}. *) - -external int_of_float : float -> int = "%intoffloat" -(** Truncate the given floating-point number to an integer. - The result is unspecified if the argument is [nan] or falls outside the - range of representable integers. *) - -val infinity : float -(** Positive infinity. *) - -val neg_infinity : float -(** Negative infinity. *) - -val nan : float -(** A special floating-point value denoting the result of an - undefined operation such as [0.0 /. 0.0]. Stands for - 'not a number'. Any floating-point operation with [nan] as - argument returns [nan] as result. As for floating-point comparisons, - [=], [<], [<=], [>] and [>=] return [false] and [<>] returns [true] - if one or both of their arguments is [nan]. *) - -val max_float : float -(** The largest positive finite value of type [float]. *) - -val min_float : float -(** The smallest positive, non-zero, non-denormalized value of type [float]. *) - -val epsilon_float : float -(** The difference between [1.0] and the smallest exactly representable - floating-point number greater than [1.0]. *) - -type fpclass = - FP_normal (** Normal number, none of the below *) - | FP_subnormal (** Number very close to 0.0, has reduced precision *) - | FP_zero (** Number is 0.0 or -0.0 *) - | FP_infinite (** Number is positive or negative infinity *) - | FP_nan (** Not a number: result of an undefined operation *) -(** The five classes of floating-point numbers, as determined by - the {!Pervasives.classify_float} function. *) - -external classify_float : (float [@unboxed]) -> fpclass = - "caml_classify_float" "caml_classify_float_unboxed" [@@noalloc] -(** Return the class of the given floating-point number: - normal, subnormal, zero, infinite, or not a number. *) - - (** {1 String operations} More string operations are provided in module {!String}. @@ -480,31 +339,6 @@ val int_of_string_opt: string -> int option @since 4.05 *) -val string_of_float : float -> string -(** Return the string representation of a floating-point number. *) - -external float_of_string : string -> float = "caml_float_of_string" -(** Convert the given string to a float. The string is read in decimal - (by default) or in hexadecimal (marked by [0x] or [0X]). - The format of decimal floating-point numbers is - [ [-] dd.ddd (e|E) [+|-] dd ], where [d] stands for a decimal digit. - The format of hexadecimal floating-point numbers is - [ [-] 0(x|X) hh.hhh (p|P) [+|-] dd ], where [h] stands for an - hexadecimal digit and [d] for a decimal digit. - In both cases, at least one of the integer and fractional parts must be - given; the exponent part is optional. - The [_] (underscore) character can appear anywhere in the string - and is ignored. - Depending on the execution platforms, other representations of - floating-point numbers can be accepted, but should not be relied upon. - Raise [Failure "float_of_string"] if the given string is not a valid - representation of a float. *) - -val float_of_string_opt: string -> float option -(** Same as [float_of_string], but returns [None] instead of raising. - @since 4.05 -*) - (** {1 Pair operations} *) external fst : 'a * 'b -> 'a = "%field0"