Module Caml.Float
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.
- since
- 4.07.0
val fma : float -> float -> float -> floatfma x y zreturnsx * 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. Note: since software emulation of the fma is costly, make sure that you are using hardware fma support if performance matters.- since
- 4.08.0
val rem : float -> float -> floatrem a breturns the remainder ofawith respect tob. The returned value isa -. n *. b, wherenis the quotienta /. brounded towards zero to an integer.
val succ : float -> floatsucc xreturns the floating point number right afterxi.e., the smallest floating-point number greater thanx. See alsonext_after.- since
- 4.08.0
val pred : float -> floatpred xreturns the floating-point number right beforexi.e., the greatest floating-point number smaller thanx. See alsonext_after.- since
- 4.08.0
val nan : floatA 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 withnanas argument returnsnanas result. As for floating-point comparisons,=,<,<=,>and>=returnfalseand<>returnstrueif one or both of their arguments isnan.
val epsilon : floatThe difference between
1.0and the smallest exactly representable floating-point number greater than1.0.
val is_finite : float -> boolis_finite xistrueiffxis finite i.e., not infinite and notnan.- since
- 4.08.0
val is_infinite : float -> boolis_infinite xistrueiffxisinfinityorneg_infinity.- since
- 4.08.0
val is_nan : float -> boolis_nan xistrueiffxis not a number (seenan).- since
- 4.08.0
val to_int : float -> intTruncate the given floating-point number to an integer. The result is unspecified if the argument is
nanor falls outside the range of representable integers.
val of_string : string -> floatConvert the given string to a float. The string is read in decimal (by default) or in hexadecimal (marked by
0xor0X). The format of decimal floating-point numbers is[-] dd.ddd (e|E) [+|-] dd, wheredstands for a decimal digit. The format of hexadecimal floating-point numbers is[-] 0(x|X) hh.hhh (p|P) [+|-] dd, wherehstands for an hexadecimal digit anddfor 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. RaiseFailure "float_of_string"if the given string is not a valid representation of a float.
type fpclass= Stdlib.fpclass=The five classes of floating-point numbers, as determined by the
classify_floatfunction.
val classify_float : float -> fpclassReturn the class of the given floating-point number: normal, subnormal, zero, infinite, or not a number.
val expm1 : float -> floatexpm1 xcomputesexp x -. 1.0, giving numerically-accurate results even ifxis close to0.0.
val log1p : float -> floatlog1p xcomputeslog(1.0 +. x)(natural logarithm), giving numerically-accurate results even ifxis close to0.0.
val acos : float -> floatArc cosine. The argument must fall within the range
[-1.0, 1.0]. Result is in radians and is between0.0andpi.
val asin : float -> floatArc sine. The argument must fall within the range
[-1.0, 1.0]. Result is in radians and is between-pi/2andpi/2.
val atan2 : float -> float -> floatatan2 y xreturns the arc tangent ofy /. x. The signs ofxandyare used to determine the quadrant of the result. Result is in radians and is between-piandpi.
val hypot : float -> float -> floathypot x yreturnssqrt(x *. x + y *. y), that is, the length of the hypotenuse of a right-angled triangle with sides of lengthxandy, or, equivalently, the distance of the point(x,y)to origin. If one ofxoryis infinite, returnsinfinityeven if the other isnan.
val trunc : float -> floattrunc xroundsxto the nearest integer whose absolute value is less than or equal tox.- since
- 4.08.0
val round : float -> floatround xroundsxto the nearest integer with ties (fractional values of 0.5) rounded away from zero, regardless of the current rounding direction. Ifxis an integer,+0.,-0.,nan, or infinite,xitself is returned.- since
- 4.08.0
val ceil : float -> floatRound above to an integer value.
ceil freturns the least integer value greater than or equal tof. The result is returned as a float.
val floor : float -> floatRound below to an integer value.
floor freturns the greatest integer value less than or equal tof. The result is returned as a float.
val next_after : float -> float -> floatnext_after x yreturns the next representable floating-point value followingxin the direction ofy. More precisely, ifyis greater (resp. less) thanx, it returns the smallest (resp. largest) representable number greater (resp. less) thanx. Ifxequalsy, the function returnsy. Ifxoryisnan, ananis returned. Note thatnext_after max_float infinity = infinityand thatnext_after 0. infinityis the smallest denormalized positive number. Ifxis the smallest denormalized positive number,next_after x 0. = 0.- since
- 4.08.0
val copy_sign : float -> float -> floatcopy_sign x yreturns a float whose absolute value is that ofxand whose sign is that ofy. Ifxisnan, returnsnan. Ifyisnan, returns eitherxor-. x, but it is not specified which.
val sign_bit : float -> boolsign_bit xistrueiff the sign bit ofxis set. For examplesign_bit 1.andsignbit 0.arefalsewhilesign_bit (-1.)andsign_bit (-0.)aretrue.- since
- 4.08.0
val frexp : float -> float * intfrexp freturns the pair of the significant and the exponent off. Whenfis zero, the significantxand the exponentnoffare equal to zero. Whenfis non-zero, they are defined byf = x *. 2 ** nand0.5 <= x < 1.0.
val compare : t -> t -> intcompare x yreturns0ifxis equal toy, a negative integer ifxis less thany, and a positive integer ifxis greater thany.comparetreatsnanas equal to itself and less than any other float value. This treatment ofnanensures thatcomparedefines a total ordering relation.
val min : t -> t -> tmin x yreturns the minimum ofxandy. It returnsnanwhenxoryisnan. Moreovermin (-0.) (+0.) = -0.- since
- 4.08.0
val max : float -> float -> floatmax x yreturns the maximum ofxandy. It returnsnanwhenxoryisnan. Moreovermax (-0.) (+0.) = +0.- since
- 4.08.0
val min_max : float -> float -> float * floatmin_max x yis(min x y, max x y), just more efficient.- since
- 4.08.0
val min_num : t -> t -> tmin_num x yreturns the minimum ofxandytreatingnanas missing values. If bothxandyarenan,nanis returned. Moreovermin_num (-0.) (+0.) = -0.- since
- 4.08.0
val max_num : t -> t -> tmax_num x yreturns the maximum ofxandytreatingnanas missing values. If bothxandyarenannanis returned. Moreovermax_num (-0.) (+0.) = +0.- since
- 4.08.0
val min_max_num : float -> float -> float * floatmin_max_num x yis(min_num x y, max_num x y), just more efficient. Note that in particularmin_max_num x nan = (x, x)andmin_max_num nan y = (y, y).- since
- 4.08.0
val hash : t -> intThe hash function for floating-point numbers.
module Array : sig ... endmodule ArrayLabels : sig ... end