gpt4 book ai didi

floating-point - OCaml 如何管理 float 加法?

转载 作者:行者123 更新时间:2023-12-05 08:15:38 24 4
gpt4 key购买 nike

在 Java 中,如果您执行 0.2 + 0.01,您将得到 0.21000000000000002

这是由于IEEE 754

但是,在 OCaml 中,如果您执行 0.2 +。 0.01,那么你得到正确的结果 0.21

我认为 OCaml 也遵守 IEEE 754 的 float ,为什么 OCaml 可以给出正确的结果而 Java 不能?

最佳答案

在这种情况下,哪一个是“正确的”?从浮点运算的角度来看,Java在这里是正确的。无论如何,

OCaml toplevel 中的值由 genprintval.ml 打印,float 值由 print_float 打印,它使用 string_of_float 。它的定义在pervasives.ml中:

let string_of_float f = valid_float_lexem (format_float "%.12g" f)

如您所见, float 是使用 printf 格式“%.12g”打印的。小于 10^{-12} 的东西会被简单地丢弃。这就是您看到“不正确”答案 0.21 的原因。如果提高精度,您将获得与 Java 相同的输出:

# Printf.sprintf "%.20g" (0.2 +. 0.01);;
- : string = "0.21000000000000002"

关于floating-point - OCaml 如何管理 float 加法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24488387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com