我有一个匹配以下正则表达式\-?[0-9]*\.[0-9]+
的字符串,它应该代表一个IEEE浮点数。它可以是单精度或双精度,我提前知道类型。我需要检查它是否可以被解释为给定的精确值中的有效值。类似的东西:
val is_valid_float: string -> bool
val is_valid_double: string -> bool
对于双精度数,我可以使用float_of_string
解析它并捕获异常。我不确定如何处理单精度。
答案 0 :(得分:0)
@ JonathanChan的评论很有启发性,可能比我说的更多。
但是,我甚至不确定验证的含义。
是" 1.0000000000000001"有效的浮动?
val f : string = "1.0000000000000001"
# float_of_string f;;
- : float = 1.
#
没有例外表明此号码不能表示为与1.0不同。
如果忽略精度问题,可能就不像字符串操作那样测试可表示的范围。
正如@JonathanChan指出的那样,最好的答案可能取决于你需要多么确定(以及你想要确切的确切)。