Floating point OCaml中的C99样式十六进制浮点常量

Floating point OCaml中的C99样式十六进制浮点常量,floating-point,ocaml,floating-point-conversion,Floating Point,Ocaml,Floating Point Conversion,在OCaml中,如何以十六进制解析C99样式的浮点常量(作为文本或内部字符串),例如0x1.b00000000000p4 它们似乎不是有效的文本: # let c = 0x1.b000000000000p4;; Characters 12-27: let c = 0x1.b000000000000p4;; ^^^^^^^^^^^^^^^ Error: Unbound record field b000000000000p4 而且似乎没有Scanf转换器来解析它们

在OCaml中,如何以十六进制解析C99样式的浮点常量(作为文本或内部字符串),例如
0x1.b00000000000p4

它们似乎不是有效的文本:

# let c = 0x1.b000000000000p4;;
Characters 12-27:
  let c = 0x1.b000000000000p4;;
              ^^^^^^^^^^^^^^^
Error: Unbound record field b000000000000p4

而且似乎没有
Scanf
转换器来解析它们(例如,C99的
%a
转换器对应于
printf
)。

float\u of_string
应该能够解析它们:

# float_of_string "0x1.199999999999Ap1";;
- : float = 2.2

然而,正如OCaml的bug跟踪器上的Alain Frisch所说,支持实际上取决于底层libc,目前在MSVC端口上不起作用。

的确如此。对于文本,我认为需要ppx扩展或类似的东西?目前是的。但在上打开功能请求并没有错。注意:从4.03开始,有类似于C99的
%a
%h
修饰符,接受并解析文字浮点十六进制常量。