module Float:sig
..end
浮點數算術運算。
OCaml 的浮點數遵循 IEEE 754 標準,使用雙精度(64 位元)數字。浮點數運算在溢位、下溢、除以零等情況下永遠不會引發例外。相反地,會適當地返回特殊的 IEEE 數值,例如 infinity
(無限大)對應 1.0 /. 0.0
、neg_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
返回 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 版起,nan
為 quiet_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 x
為 true
。
val is_infinite : float -> bool
當且僅當 x
是 Float.infinity
或 Float.neg_infinity
時,is_infinite x
為 true
。
val is_nan : float -> bool
當且僅當 x
不是數字時(請參閱 Float.nan
),is_nan x
為 true
。
val is_integer : float -> bool
當且僅當 x
為整數時,is_integer x
為 true
。
val of_int : int -> float
將整數轉換為浮點數。
val to_int : float -> int
將給定的浮點數截斷為整數。如果參數為 nan
或超出可表示的整數範圍,則結果未指定。
val of_string : string -> float
將給定的字串轉換為浮點數。字串以十進位(預設)或十六進位(以 0x
或 0X
標示)讀取。十進位浮點數的格式為 [-] dd.ddd (e|E) [+|-] dd
,其中 d
代表十進位數字。十六進位浮點數的格式為 [-] 0(x|X) hh.hhh (p|P) [+|-] dd
,其中 h
代表十六進位數字,而 d
代表十進位數字。在這兩種情況下,都必須至少給定整數部分和小數部分中的一個;指數部分是可選的。_
(底線)字元可以出現在字串中的任何位置,並會被忽略。根據執行平台的不同,可能會接受其他浮點數的表示形式,但不應依賴它們。
Failure
例外。val of_string_opt : string -> float option
與 of_string
相同,但返回 None
而不是引發例外。
val to_string : float -> string
typefpclass =
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.0
和 pi
之間。
val asin : float -> float
反正弦。參數必須落在 [-1.0, 1.0]
範圍內。結果以弧度為單位,介於 -pi/2
和 pi/2
之間。
val atan : float -> float
反正切。結果以弧度為單位,介於 -pi/2
和 pi/2
之間。
val atan2 : float -> float -> float
atan2 y x
返回 y /. x
的反正切。使用 x
和 y
的正負號來判斷結果的象限。結果以弧度為單位,介於 -pi
和 pi
之間。
val hypot : float -> float -> float
hypot x y
返回 sqrt(x *. x +. y *. y)
,即邊長為 x
和 y
的直角三角形的斜邊長度,或等效地,點 (x,y)
到原點的距離。如果 x
或 y
其中之一是無限大,則即使另一個是 nan
,也會返回 infinity
。
val cosh : float -> float
雙曲餘弦。參數以弧度為單位。
val sinh : float -> float
雙曲正弦。參數以弧度為單位。
val tanh : float -> float
雙曲正切。參數以弧度為單位。
val acosh : float -> float
雙曲反餘弦。參數必須落在 [1.0, inf]
範圍內。結果以弧度為單位,介於 0.0
和 inf
之間。
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 x
將 x
捨入為最接近的整數,該整數的絕對值小於或等於 x
。
val round : float -> float
round x
將 x
捨入為最接近的整數,當有兩個最接近的整數時(小數值為 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
。如果 x
或 y
為 nan
,則會回傳 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
的符號相同。如果 x
為 nan
,則回傳 nan
。如果 y
為 nan
,則回傳 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 ** n
和 0.5 <= x < 1.0
定義。
val ldexp : float -> int -> float
ldexp x n
函式會回傳 x *. 2 ** n
。
val modf : float -> float * float
modf f
函式會回傳 f
的小數部分和整數部分的配對。
typet =
float
浮點數類型的別名。
val compare : t -> t -> int
compare x y
函式會在 x
等於 y
時回傳 0
,在 x
小於 y
時回傳負整數,在 x
大於 y
時回傳正整數。compare
將 nan
視為等於其自身,且小於任何其他浮點數值。這種對 nan
的處理方式可確保 compare
定義一個總排序關係。
val equal : t -> t -> bool
用於比較浮點數是否相等的函式,使用 Float.compare
進行比較。
val min : t -> t -> t
min x y
函式會回傳 x
和 y
的最小值。當 x
或 y
為 nan
時,它會回傳 nan
。此外,min (-0.) (+0.) = -0.
val max : float -> float -> float
max x y
函式會回傳 x
和 y
的最大值。當 x
或 y
為 nan
時,它會回傳 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
函式會回傳 x
和 y
的最小值,並將 nan
視為遺失值。如果 x
和 y
都是 nan
,則會回傳 nan
。此外,min_num (-0.) (+0.) = -0.
val max_num : t -> t -> t
max_num x y
函式會回傳 x
和 y
的最大值,並將 nan
視為遺失值。如果 x
和 y
都是 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
具有封裝表示法的浮點數陣列(標籤函數)。