![](/img/trans.png)
[英]Range of representable values of 32-bit, 64-bit and 80-bit float IEEE-754?
[英]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.