2

我有一个与以下正则表达式匹配的字符串,\-?[0-9]*\.[0-9]+它应该代表一个 IEEE 浮点数。它可以是单精度或双精度,我提前知道类型。我需要检查它是否可以被解释为给定精度的有效值。就像是:

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

对于双精度数字,我可以使用解析它float_of_string并捕获异常。我不确定如何处理单精度。

4

1 回答 1

0

@JonathanChan 的评论很有启发性,可能比我说的任何话都更有启发性。

但是,我什至不确定您所说的验证是什么意思。

“1.0000000000000001”是一个有效的浮点数吗?

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

没有例外地表明这个数字不能表示为与 1.0 不同。

如果您忽略精度问题,则可能不难对可表示范围进行测试,就像字符串操作一样。

正如@JonathanChan 指出的那样,最好的答案可能取决于您需要确定的程度(以及您想要确定的确切内容)。

于 2017-07-28T00:08:24.500 回答