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

ano*_*nol 3 floating-point ocaml floating-point-conversion

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

看起来它们不是有效的文字:

# let c = 0x1.b000000000000p4;;
Characters 12-27:
  let c = 0x1.b000000000000p4;;
              ^^^^^^^^^^^^^^^
Error: Unbound record field b000000000000p4
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*zli 6

float_of_string 应该能够解析它们:

# float_of_string "0x1.199999999999Ap1";;
- : float = 2.2
Run Code Online (Sandbox Code Playgroud)

然而,正如Alain Frisch 在OCaml的错误跟踪器上所指出的那样,支持实际上取决于底层的libc,并且目前无法在MSVC端口上运行.