我有一个与以下正则表达式匹配的字符串,\-?[0-9]*\.[0-9]+
它应该代表一个 IEEE 浮点数。它可以是单精度或双精度,我提前知道类型。我需要检查它是否可以被解释为给定精度的有效值。就像是:
val is_valid_float: string -> bool
val is_valid_double: string -> bool
对于双精度数字,我可以使用解析它float_of_string
并捕获异常。我不确定如何处理单精度。
我有一个与以下正则表达式匹配的字符串,\-?[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 指出的那样,最好的答案可能取决于您需要确定的程度(以及您想要确定的确切内容)。