我有一个与以下正则表达式-?[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指出的那样,最好的答案可能取决于你需要有多确定(以及你想要确定的确切内容(。