繁体   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