簡體   English   中英

OCaml中的IEEE 64和32位浮點驗證

[英]IEEE 64 and 32 bit float validation in OCaml

我有一個與以下正則表達式\\-?[0-9]*\\.[0-9]+相匹配的字符串,該表達式可能表示IEEE浮點數。 它可以是單精度或雙精度,我事先知道類型。 我需要檢查在給定的精度下是否可以將其解釋為有效值。 就像是:

val is_valid_float: string -> bool
val is_valid_double: string -> bool

對於雙精度數字,我可以使用float_of_string解析它並捕獲異常。 我不確定如何處理單精度。

@JonathanChan的評論很有啟發性,可能比我能說的要多。

但是,我什至不知道驗證的含義。

“ 1.0000000000000001”是有效的浮點數嗎?

 val f : string = "1.0000000000000001"
 # float_of_string f;;
 - : float = 1.
 #

毫無例外地表示此數字不能表示為不同於1.0。

如果您忽略精度問題,那么就可以像字符串操作一樣在可表示范圍內進行測試,這可能並不困難。

正如@JonathanChan指出的那樣,最好的答案可能取決於您需要被確保的程度(以及您想要確定的確切程度)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM