Module Float
: sigend
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 , basic arithmetic
operations ( +. , -. , *. , /. ) with nan as an argument return nan , ...
Since 4.07
valzero : float
The floating point 0.
Since 4.08
valone : float
The floating-point 1.
Since 4.08
valminus_one : float
The floating-point -1.
Since 4.08
valneg : float->float
Unary negation.
valadd : float->float->float
Floating-point addition.
valsub : float->float->float
Floating-point subtraction.
valmul : float->float->float
Floating-point multiplication.
valdiv : float->float->float
Floating-point division.
valfma : float->float->float->floatfmaxyz 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.
Since 4.08
valrem : float->float->floatremab 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.
valsucc : float->floatsuccx returns the floating point number right after x i.e., the smallest floating-point number greater
than x . See also Float.next_after .
Since 4.08
valpred : float->floatpredx returns the floating-point number right before x i.e., the greatest floating-point number smaller
than x . See also Float.next_after .
Since 4.08
valabs : float->floatabsf returns the absolute value of f .
valinfinity : float
Positive infinity.
valneg_infinity : float
Negative infinity.
valnan : 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, unless
otherwise specified in IEEE 754 standard. As for floating-point comparisons, = , < , <= , > and >=
return false and <> returns true if one or both of their arguments is nan .
nan is quiet_nan since 5.1; it was a signaling NaN before.
valsignaling_nan : float
Signaling NaN. The corresponding signals do not raise OCaml exception, but the value can be useful for
interoperability with C libraries.
Since 5.1
valquiet_nan : float
Quiet NaN.
Since 5.1
valpi : float
The constant pi.
valmax_float : float
The largest positive finite value of type float .
valmin_float : float
The smallest positive, non-zero, non-denormalized value of type float .
valepsilon : float
The difference between 1.0 and the smallest exactly representable floating-point number greater than 1.0
.
valis_finite : float->boolis_finitex is true if and only if x is finite i.e., not infinite and not Float.nan .
Since 4.08
valis_infinite : float->boolis_infinitex is true if and only if x is Float.infinity or Float.neg_infinity .
Since 4.08
valis_nan : float->boolis_nanx is true if and only if x is not a number (see Float.nan ).
Since 4.08
valis_integer : float->boolis_integerx is true if and only if x is an integer.
Since 4.08
valof_int : int->float
Convert an integer to floating-point.
valto_int : float->int
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.
valof_string : string->float
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.
RaisesFailure if the given string is not a valid representation of a float.
valof_string_opt : string->floatoption
Same as of_string , but returns None instead of raising.
valto_string : float->string
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 string_of_float .
typefpclass = 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 Float.classify_float function.
valclassify_float : float->fpclass
Return the class of the given floating-point number: normal, subnormal, zero, infinite, or not a number.
valpow : float->float->float
Exponentiation.
valsqrt : float->float
Square root.
valcbrt : float->float
Cube root.
Since 4.13
valexp : float->float
Exponential.
valexp2 : float->float
Base 2 exponential function.
Since 4.13
vallog : float->float
Natural logarithm.
vallog10 : float->float
Base 10 logarithm.
vallog2 : float->float
Base 2 logarithm.
Since 4.13
valexpm1 : float->floatexpm1x computes expx-.1.0 , giving numerically-accurate results even if x is close to 0.0 .
vallog1p : float->floatlog1px computes log(1.0+.x) (natural logarithm), giving numerically-accurate results even if x is
close to 0.0 .
valcos : float->float
Cosine. Argument is in radians.
valsin : float->float
Sine. Argument is in radians.
valtan : float->float
Tangent. Argument is in radians.
valacos : float->float
Arc cosine. The argument must fall within the range [-1.0,1.0] . Result is in radians and is between
0.0 and pi .
valasin : float->float
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 .
valatan : float->float
Arc tangent. Result is in radians and is between -pi/2 and pi/2 .
valatan2 : float->float->floatatan2yx 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 .
valhypot : float->float->floathypotxy 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 .
valcosh : float->float
Hyperbolic cosine. Argument is in radians.
valsinh : float->float
Hyperbolic sine. Argument is in radians.
valtanh : float->float
Hyperbolic tangent. Argument is in radians.
valacosh : float->float
Hyperbolic arc cosine. The argument must fall within the range [1.0,inf] . Result is in radians and is
between 0.0 and inf .
Since 4.13
valasinh : float->float
Hyperbolic arc sine. The argument and result range over the entire real line. Result is in radians.
Since 4.13
valatanh : float->float
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.
Since 4.13
valerf : float->float
Error function. The argument ranges over the entire real line. The result is always within [-1.0,1.0]
.
Since 4.13
valerfc : float->float
Complementary error function ( erfcx=1-erfx ). The argument ranges over the entire real line. The
result is always within [0.0,2.0] .
Since 4.13
valtrunc : float->floattruncx rounds x to the nearest integer whose absolute value is less than or equal to x .
Since 4.08
valround : float->floatroundx 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.
Since 4.08
valceil : float->float
Round above to an integer value. ceilf returns the least integer value greater than or equal to f .
The result is returned as a float.
valfloor : float->float
Round below to an integer value. floorf returns the greatest integer value less than or equal to f .
The result is returned as a float.
valnext_after : float->float->floatnext_afterxy 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_aftermax_floatinfinity=infinity and that next_after0.infinity is the smallest denormalized positive number. If x is the smallest denormalized positive
number, next_afterx0.=0.Since 4.08
valcopy_sign : float->float->floatcopy_signxy 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.
valsign_bit : float->boolsign_bitx is true if and only if the sign bit of x is set. For example sign_bit1. and signbit0. are
false while sign_bit(-1.) and sign_bit(-0.) are true .
Since 4.08
valfrexp : float->float*intfrexpf 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 .
valldexp : float->int->floatldexpxn returns x*.2**n .
valmodf : float->float*floatmodff returns the pair of the fractional and integral part of f .
typet = float
An alias for the type of floating-point numbers.
valcompare : t->t->intcomparexy 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.
valequal : t->t->bool
The equal function for floating-point numbers, compared using Float.compare .
valmin : t->t->tminxy returns the minimum of x and y . It returns nan when x or y is nan . Moreover min(-0.)(+0.)=-0.Since 4.08
valmax : float->float->floatmaxxy returns the maximum of x and y . It returns nan when x or y is nan . Moreover max(-0.)(+0.)=+0.Since 4.08
valmin_max : float->float->float*floatmin_maxxy is (minxy,maxxy) , just more efficient.
Since 4.08
valmin_num : t->t->tmin_numxy 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.Since 4.08
valmax_num : t->t->tmax_numxy returns the maximum of x and y treating nan as missing values. If both x and y are nannan
is returned. Moreover max_num(-0.)(+0.)=+0.Since 4.08
valmin_max_num : float->float->float*floatmin_max_numxy is (min_numxy,max_numxy) , just more efficient. Note that in particular min_max_numxnan=(x,x) and min_max_numnany=(y,y) .
Since 4.08
valseeded_hash : int->t->int
A seeded hash function for floats, with the same output value as Hashtbl.seeded_hash . This function
allows this module to be passed as argument to the functor Hashtbl.MakeSeeded .
Since 5.1
valhash : t->int
An unseeded hash function for floats, with the same output value as Hashtbl.hash . This function allows
this module to be passed as argument to the functor Hashtbl.Make .
moduleArray:sigend
Float arrays with packed representation.
moduleArrayLabels:sigend
Float arrays with packed representation (labeled functions).
OCamldoc 2025-06-12 Float(3o)