模組 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 /. infinity 會是 0.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 返回 ab 的餘數。返回的值為 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

當且僅當 x 是有限的,即非無限且非 Float.nan 時,is_finite xtrue

val is_infinite : float -> bool

當且僅當 xFloat.infinityFloat.neg_infinity 時,is_infinite xtrue

val is_nan : float -> bool

當且僅當 x 不是數字時(請參閱 Float.nan),is_nan xtrue

val is_integer : float -> bool

當且僅當 x 為整數時,is_integer xtrue

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 其中之一是無限大,則即使另一個是 nan,也會返回 infinity

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 函式會回傳浮點數值,此數值是沿著 y 的方向,緊接在 x 之後下一個可表示的浮點數值。更精確地說,如果 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

具有封裝表示法的浮點數陣列(標籤函數)。