模块 Float

module Float: sig .. end

浮点数运算。

OCaml 的浮点数遵循 IEEE 754 标准,使用双精度 (64 位) 数。浮点运算绝不会因溢出、下溢、除以零等情况引发异常。相反,将根据需要返回特殊的 IEEE 数,例如 infinity 用于 1.0 /. 0.0neg_infinity 用于 -1.0 /. 0.0,以及 nan(“非数字”)用于 0.0 /. 0.0。这些特殊数字随后会按预期在浮点计算中传播:例如,1.0 /. infinity0.0,带有 nan 作为参数的基本算术运算 (+.-.*./.) 返回 nan,等等。


val zero : float

浮点数 0。

val one : float

浮点数 1。

val minus_one : float

浮点数 -1。

val neg : float -> float

一元否定。

val add : float -> float -> float

浮点数加法。

val sub : float -> float -> float

浮点数减法。

val mul : float -> float -> float

浮点数乘法。

val div : float -> float -> float

浮点数除法。

val fma : float -> float -> float -> float

fma x y z 返回 x * y + z,尽力使用单次舍入计算此表达式,使用硬件指令(提供完整的 IEEE 兼容性)或软件仿真。

在 64 位 Cygwin、64 位 mingw-w64 和 MSVC 2017 及更早版本上,由于这些平台上的已知错误或限制,此函数可能会被仿真。注意:由于 fma 的软件仿真成本很高,因此请确保在性能至关重要时使用硬件 fma 支持。

val rem : float -> float -> float

rem a b 返回 a 关于 b 的余数。返回值为 a -. n *. b,其中 n 是商 a /. b 向零舍入到整数。

val succ : float -> float

succ x 返回紧随 x 之后的浮点数,即大于 x 的最小浮点数。另请参见 Float.next_after

val pred : float -> float

pred x 返回紧位于 x 之前的浮点数,即小于 x 的最大浮点数。另请参见 Float.next_after

val abs : float -> float

abs f 返回 f 的绝对值。

val infinity : float

正无穷大。

val neg_infinity : float

负无穷大。

val nan : float

表示未定义操作(如 0.0 /. 0.0)结果的特殊浮点值。代表“非数字”。任何以 nan 作为参数的浮点运算都将返回 nan 作为结果,除非 IEEE 754 标准中另有说明。至于浮点比较,如果一个或两个参数为 nan,则 =<<=>>= 返回 false<> 返回 true

自 5.1 版本起,nanquiet_nan;在此之前为信号 NaN。

val signaling_nan : float

信号 NaN。相应的信号不会引发 OCaml 异常,但该值对于与 C 库的互操作性很有用。

val quiet_nan : float

静默 NaN。

val pi : float

常数 pi。

val max_float : float

float 类型的最大正有限值。

val min_float : float

float 类型的最小正非零非规格化值。

val epsilon : float

1.0 与大于 1.0 的最小精确可表示浮点数之间的差值。

val is_finite : float -> bool

is_finite x 当且仅当 x 为有限值(即非无限且非 Float.nan)时为 true

val is_infinite : float -> bool

is_infinite x 当且仅当 xFloat.infinityFloat.neg_infinity 时为 true

val is_nan : float -> bool

is_nan x 当且仅当 x 为非数字(参见 Float.nan)时为 true

val is_integer : float -> bool

is_integer x 当且仅当 x 为整数时为 true

val of_int : int -> float

将整数转换为浮点数。

val to_int : float -> int

将给定的浮点数截断为整数。如果参数为 nan 或超出可表示整数的范围,则结果未指定。

val of_string : string -> float

将给定的字符串转换为浮点数。字符串以十进制(默认)或十六进制(以 0x0X 标记)读取。十进制浮点数的格式为  [-] dd.ddd (e|E) [+|-] dd ,其中 d 代表十进制数字。十六进制浮点数的格式为  [-] 0(x|X) hh.hhh (p|P) [+|-] dd ,其中 h 代表十六进制数字,d 代表十进制数字。在这两种情况下,都必须给出整数部分和分数部分中的至少一个;指数部分是可选的。 _(下划线)字符可以出现在字符串中的任何位置,并且会被忽略。根据执行平台的不同,可以接受浮点数的其他表示形式,但不应依赖于此。

val of_string_opt : string -> float option

of_string 相同,但返回 None 而不是引发异常。

val to_string : float -> string

返回浮点数的字符串表示形式。

此转换可能涉及精度损失。有关如何打印数字方式的更多控制,请参阅 Printf

此函数是 string_of_float 的别名。

type fpclass = fpclass = 
| FP_normal (*

普通数,不属于以下任何一种

*)
| FP_subnormal (*

非常接近 0.0 的数字,精度降低

*)
| FP_zero (*

数字为 0.0 或 -0.0

*)
| FP_infinite (*

数字为正无穷大或负无穷大

*)
| FP_nan (*

非数字:未定义操作的结果

*)

浮点数的五种类别,由 Float.classify_float 函数确定。

val classify_float : float -> fpclass

返回给定浮点数的类别:普通、次正规、零、无限或非数字。

val pow : float -> float -> float

求幂。

val sqrt : float -> float

平方根。

val cbrt : float -> float

立方根。

val exp : float -> float

指数函数。

val exp2 : float -> float

以 2 为底的指数函数。

val log : float -> float

自然对数。

val log10 : float -> float

以 10 为底的对数。

val log2 : float -> float

以 2 为底的对数。

val expm1 : float -> float

expm1 x 计算 exp x -. 1.0,即使 x 接近 0.0,也能提供数值精确的结果。

val log1p : float -> float

log1p x 计算 log(1.0 +. x)(自然对数),即使 x 接近 0.0,也能提供数值精确的结果。

val cos : float -> float

余弦。参数以弧度为单位。

val sin : float -> float

正弦。参数以弧度为单位。

val tan : float -> float

正切。参数以弧度为单位。

val acos : float -> float

反余弦。参数必须落在 [-1.0, 1.0] 范围内。结果以弧度为单位,介于 0.0pi 之间。

val asin : float -> float

反正弦。参数必须落在 [-1.0, 1.0] 范围内。结果以弧度为单位,介于 -pi/2pi/2 之间。

val atan : float -> float

反正切。结果以弧度为单位,介于 -pi/2pi/2 之间。

val atan2 : float -> float -> float

atan2 y x 返回 y /. x 的反正切。 xy 的符号用于确定结果的象限。结果以弧度为单位,介于 -pipi 之间。

val hypot : float -> float -> float

hypot x y 返回 sqrt(x *. x +. y *. y),即边长分别为 xy 的直角三角形的斜边长度,或者等效地,点 (x,y) 到原点的距离。如果 xy 中的一个为无限大,则返回 infinity,即使另一个为 nan

val cosh : float -> float

双曲余弦。参数以弧度为单位。

val sinh : float -> float

双曲正弦。参数以弧度为单位。

val tanh : float -> float

双曲正切。参数以弧度为单位。

val acosh : float -> float

双曲反余弦。参数必须落在 [1.0, inf] 范围内。结果以弧度为单位,介于 0.0inf 之间。

val asinh : float -> float

双曲反正弦。参数和结果范围涵盖整个实数轴。结果以弧度为单位。

val atanh : float -> float

双曲反正切。参数必须落在 [-1.0, 1.0] 范围内。结果以弧度为单位,范围涵盖整个实数轴。

val erf : float -> float

误差函数。参数范围涵盖整个实数轴。结果始终在 [-1.0, 1.0] 范围内。

val erfc : float -> float

互补误差函数 (erfc x = 1 - erf x)。参数范围涵盖整个实数轴。结果始终在 [-1.0, 1.0] 范围内。

val trunc : float -> float

trunc xx 舍入到其绝对值小于或等于 x 的最近整数。

val round : float -> float

round xx 四舍五入到最接近的整数,对于 0.5 的小数部分,无论当前舍入方向如何,都远离零舍入。如果 x 是整数、+0.-0.nan 或无限大,则返回 x 本身。

在 64 位 mingw-w64 上,由于该平台上的 C 运行时库 (CRT) 中存在错误,此函数可能会被模拟。

val ceil : float -> float

向上舍入到整数值。 ceil f 返回大于或等于 f 的最小整数值。结果以浮点数形式返回。

val floor : float -> float

向下舍入到整数值。 floor f 返回小于或等于 f 的最大整数值。结果以浮点数形式返回。

val next_after : float -> float -> float

next_after x y 返回 x 之后紧邻的浮点数,方向朝向 y。更准确地说,如果 y 大于(或小于)x,则返回大于(或小于)x 的最小(或最大)可表示数。如果 x 等于 y,则函数返回 y。如果 xynan,则返回 nan。请注意,next_after max_float infinity = infinity 以及 next_after 0. infinity 是最小的非规格化正数。如果 x 是最小的非规格化正数,则 next_after x 0. = 0.

val copy_sign : float -> float -> float

copy_sign x y 返回一个浮点数,其绝对值为 x 的绝对值,其符号为 y 的符号。如果 xnan,则返回 nan。如果 ynan,则返回 x-. x,但未指定返回哪个。

val sign_bit : float -> bool

sign_bit x 当且仅当 x 的符号位被设置时为 true。例如,sign_bit 1.signbit 0.false,而 sign_bit (-1.)sign_bit (-0.)true

val frexp : float -> float * int

frexp f 返回 f 的有效数字和指数对。当 f 为零时,f 的有效数字 x 和指数 n 都等于零。当 f 不为零时,它们由 f = x *. 2 ** n0.5 <= x < 1.0 定义。

val ldexp : float -> int -> float

ldexp x n 返回 x *. 2 ** n

val modf : float -> float * float

modf f 返回 f 的小数部分和整数部分对。

type t = float 

浮点数类型的别名。

val compare : t -> t -> int

compare x y 如果 x 等于 y,则返回 0;如果 x 小于 y,则返回负整数;如果 x 大于 y,则返回正整数。comparenan 视为等于自身,并且小于任何其他浮点数。这种对 nan 的处理确保了 compare 定义了一个全序关系。

val equal : t -> t -> bool

浮点数的相等函数,使用 Float.compare 进行比较。

val min : t -> t -> t

min x y 返回 xy 中的最小值。当 xynan 时,返回 nan。此外,min (-0.) (+0.) = -0.

val max : float -> float -> float

max x y 返回 xy 中的最大值。当 xynan 时,返回 nan。此外,max (-0.) (+0.) = +0.

val min_max : float -> float -> float * float

min_max x y 等于 (min x y, max x y),只是效率更高。

val min_num : t -> t -> t

min_num x y 返回 xy 中的最小值,将 nan 视为缺失值。如果 xy 都为 nan,则返回 nan。此外,min_num (-0.) (+0.) = -0.

val max_num : t -> t -> t

max_num x y 返回 xy 中的最大值,将 nan 视为缺失值。如果 xy 都为 nan,则返回 nan。此外,max_num (-0.) (+0.) = +0.

val min_max_num : float -> float -> float * float

min_max_num x y 等于 (min_num x y, max_num x y),只是效率更高。请注意,特别是 min_max_num x nan = (x, x) 以及 min_max_num nan y = (y, y)

val seeded_hash : int -> t -> int

浮点数的带种子哈希函数,其输出值与 Hashtbl.seeded_hash 相同。此函数允许将此模块作为参数传递给函子 Hashtbl.MakeSeeded

val hash : t -> int

浮点数的无种子哈希函数,其输出值与 Hashtbl.hash 相同。此函数允许将此模块作为参数传递给函子 Hashtbl.Make

module Array: sig .. end

具有打包表示的浮点数组。

module ArrayLabels: sig .. end

具有打包表示的浮点数组(带标签的函数)。