OCaml 中的 C99 风格的十六进制浮点常量

C99-style hexadecimal floating-point constants in OCaml

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

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

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

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

float_of_string 应该能够解析它们:

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

然而,正如 Alain Frisch noted 在 OCaml 的错误跟踪器上所说,支持实际上取决于底层 libc,目前无法在 MSVC 端口上运行。