jon.recoil.org

Module Stdlib_upstream_compatible.Float_uSource

Unboxed floating-point arithmetic. This file primarily duplicates functionality from the Float module, but for float#.

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, basic arithmetic operations (+., -., *., /.) with nan as an argument return nan, ...

Sourcetype t = float#

An alias for the type of unboxed floating-point numbers.

Sourceval to_float : t -> float @@ portable

Box a float#

Sourceval of_float : float -> t @@ portable

Unbox a boxed float

Sourceval neg : t -> t @@ portable

Unary negation.

Sourceval add : t -> t -> t @@ portable

Floating-point addition.

Sourceval sub : t -> t -> t @@ portable

Floating-point subtraction.

Sourceval mul : t -> t -> t @@ portable

Floating-point multiplication.

Sourceval div : t -> t -> t @@ portable

Floating-point division.

Sourceval fma : t -> t -> t -> t @@ portable

fma x y z returns x * y + z, with a best effort for computing this expression with a single rounding, using either hardware instructions (providing full IEEE compliance) or a software emulation.

On 64-bit Cygwin, 64-bit mingw-w64 and MSVC 2017 and earlier, this function may be emulated owing to known bugs on limitations on these platforms. Note: since software emulation of the fma is costly, make sure that you are using hardware fma support if performance matters.

Sourceval rem : t -> t -> t @@ portable

rem 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.

Sourceval succ : t -> t @@ portable

succ x returns the floating point number right after x i.e., the smallest floating-point number greater than x. See also next_after.

Sourceval pred : t -> t @@ portable

pred x returns the floating-point number right before x i.e., the greatest floating-point number smaller than x. See also next_after.

Sourceval abs : t -> t @@ portable

abs f returns the absolute value of f.

Sourceval is_finite : t -> bool @@ portable

is_finite x is true if and only if x is finite i.e., not infinite and not nan.

Sourceval is_infinite : t -> bool @@ portable

is_infinite x is true if and only if x is infinity or neg_infinity.

Sourceval is_nan : t -> bool @@ portable

is_nan x is true if and only if x is not a number (see nan).

Sourceval is_integer : t -> bool @@ portable

is_integer x is true if and only if x is an integer.

Sourceval of_int : int -> t @@ portable

Convert an integer to floating-point.

Sourceval to_int : t -> int @@ portable

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.

Sourceval of_string : string -> t @@ portable

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.

  • raises Failure

    if the given string is not a valid representation of a float.

Sourceval to_string : t -> string @@ portable

Return a string representation of a floating-point number.

This conversion can involve a loss of precision. For greater control over the manner in which the number is printed, see Printf.

This function is an alias for Stdlib.string_of_float.

Sourcetype fpclass = fpclass =
  1. | FP_normal
    (*

    Normal number, none of the below

    *)
  2. | FP_subnormal
    (*

    Number very close to 0.0, has reduced precision

    *)
  3. | FP_zero
    (*

    Number is 0.0 or -0.0

    *)
  4. | FP_infinite
    (*

    Number is positive or negative infinity

    *)
  5. | FP_nan
    (*

    Not a number: result of an undefined operation

    *)

The five classes of floating-point numbers, as determined by the classify_float function.

Sourceval classify_float : t -> fpclass @@ portable

Return the class of the given floating-point number: normal, subnormal, zero, infinite, or not a number.

Sourceval pow : t -> t -> t @@ portable

Exponentiation.

Sourceval sqrt : t -> t @@ portable

Square root.

Sourceval cbrt : t -> t @@ portable

Cube root.

Sourceval exp : t -> t @@ portable

Exponential.

Sourceval exp2 : t -> t @@ portable

Base 2 exponential function.

Sourceval log : t -> t @@ portable

Natural logarithm.

Sourceval log10 : t -> t @@ portable

Base 10 logarithm.

Sourceval log2 : t -> t @@ portable

Base 2 logarithm.

Sourceval expm1 : t -> t @@ portable

expm1 x computes exp x -. #1.0, giving numerically-accurate results even if x is close to #0.0.

Sourceval log1p : t -> t @@ portable

log1p x computes log(#1.0 +. x) (natural logarithm), giving numerically-accurate results even if x is close to #0.0.

Sourceval cos : t -> t @@ portable

Cosine. Argument is in radians.

Sourceval sin : t -> t @@ portable

Sine. Argument is in radians.

Sourceval tan : t -> t @@ portable

Tangent. Argument is in radians.

Sourceval acos : t -> t @@ portable

Arc cosine. The argument must fall within the range [-1.0, 1.0]. Result is in radians and is between 0.0 and pi.

Sourceval asin : t -> t @@ portable

Arc sine. The argument must fall within the range [-1.0, 1.0]. Result is in radians and is between -pi/2 and pi/2.

Sourceval atan : t -> t @@ portable

Arc tangent. Result is in radians and is between -pi/2 and pi/2.

Sourceval atan2 : t -> t -> t @@ portable

atan2 y x returns the arc tangent of y /. x. The signs of x and y are used to determine the quadrant of the result. Result is in radians and is between -pi and pi.

Sourceval hypot : t -> t -> t @@ portable

hypot x y returns sqrt(x *. x + y *. y), that is, the length of the hypotenuse of a right-angled triangle with sides of length x and y, or, equivalently, the distance of the point (x,y) to origin. If one of x or y is infinite, returns infinity even if the other is nan.

Sourceval cosh : t -> t @@ portable

Hyperbolic cosine. Argument is in radians.

Sourceval sinh : t -> t @@ portable

Hyperbolic sine. Argument is in radians.

Sourceval tanh : t -> t @@ portable

Hyperbolic tangent. Argument is in radians.

Sourceval acosh : t -> t @@ portable

Hyperbolic arc cosine. The argument must fall within the range [1.0, inf]. Result is in radians and is between 0.0 and inf.

Sourceval asinh : t -> t @@ portable

Hyperbolic arc sine. The argument and result range over the entire real line. Result is in radians.

Sourceval atanh : t -> t @@ portable

Hyperbolic arc tangent. The argument must fall within the range [-1.0, 1.0]. Result is in radians and ranges over the entire real line.

Sourceval erf : t -> t @@ portable

Error function. The argument ranges over the entire real line. The result is always within [-1.0, 1.0].

Sourceval erfc : t -> t @@ portable

Complementary error function (erfc x = 1 - erf x). The argument ranges over the entire real line. The result is always within [-1.0, 1.0].

Sourceval trunc : t -> t @@ portable

trunc x rounds x to the nearest integer whose absolute value is less than or equal to x.

Sourceval round : t -> t @@ portable

round x rounds x to the nearest integer with ties (fractional values of 0.5) rounded away from zero, regardless of the current rounding direction. If x is an integer, #+0., #-0., nan, or infinite, x itself is returned.

On 64-bit mingw-w64, this function may be emulated owing to a bug in the C runtime library (CRT) on this platform.

Sourceval ceil : t -> t @@ portable

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.

Sourceval floor : t -> t @@ portable

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.

Sourceval next_after : t -> t -> t @@ portable

next_after x y returns the next representable floating-point value following x in the direction of y. More precisely, if y is greater (resp. less) than x, it returns the smallest (resp. largest) representable number greater (resp. less) than x. If x equals y, the function returns y. If x or y is nan, a nan is returned. Note that next_after max_float infinity = infinity and that next_after #0. infinity is the smallest denormalized positive number. If x is the smallest denormalized positive number, next_after x #0. = #0.

Sourceval copy_sign : t -> t -> t @@ portable

copy_sign 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.

Sourceval sign_bit : t -> bool @@ portable

sign_bit x is true if and only if the sign bit of x is set. For example sign_bit #1. and signbit #0. are false while sign_bit #-1. and sign_bit #-0. are true.

Sourceval ldexp : t -> int -> t @@ portable

ldexp x n returns x *. #2 ** n.

Sourceval compare : t -> t -> int @@ portable

compare x y returns 0 if x is equal to y, a negative integer if x is less than y, and a positive integer if x is greater than y. compare treats nan as equal to itself and less than any other float value. This treatment of nan ensures that compare defines a total ordering relation.

Sourceval equal : t -> t -> bool @@ portable

The equal function for floating-point numbers, compared using compare.

Sourceval min : t -> t -> t @@ portable

min x y returns the minimum of x and y. It returns nan when x or y is nan. Moreover min #-0. #+0. = #-0.

Sourceval max : t -> t -> t @@ portable

max x y returns the maximum of x and y. It returns nan when x or y is nan. Moreover max #-0. #+0. = #+0.

Sourceval min_num : t -> t -> t @@ portable

min_num x y returns the minimum of x and y treating nan as missing values. If both x and y are nan, nan is returned. Moreover min_num #-0. #+0. = #-0.

Sourceval max_num : t -> t -> t @@ portable

max_num x y returns the maximum of x and y treating nan as missing values. If both x and y are nan nan is returned. Moreover max_num #-0. #+0. = #+0.