【发布时间】:2014-06-30 10:48:22
【问题描述】:
在Java中,如果你做0.2 + 0.01,你会得到0.21000000000000002
这是由于IEEE 754。
但是,在 OCaml 中,如果您执行 0.2 +. 0.01,那么您会得到正确的结果 0.21。
我认为 OCaml 也遵守 IEEE 754 的浮点数,为什么 OCaml 可以给出正确的结果而 Java 不能?
【问题讨论】:
-
是什么让你觉得OCaml的结果和Java的结果不一样?
-
@JasonMArcher:同样的潜在问题;发帖人误解了
0.2和0.01是什么。 (关于另一个问题的公认答案是可怕,但权力似乎希望将事情标记为该问题的欺骗,而不是给出一个体面的答案。) -
@tmyklebu 这不是那个问题的重复。我在我的问题中说,我理解为什么在 Java 中它不是
0.21,而是0.210000000000000002,我知道这是由于 IEEE 754。但我不知道为什么 OCaml 似乎不像我那样工作尝试打印0.2 +. 0.01我在屏幕上得到0.21。下面的正确答案说的是实话,是因为OCaml的打印。如果我问为什么 Java 将0.2+0.01打印为0.21000000000000002,那么这将是一个重复。请不要滥用close按钮的功能,因为它会误导未来有类似问题的其他人。 -
@tmyklebu 如果我问为什么 Java 或任何其他语言将
0.21000000000002提供给0.2 + 0.01?,那么是的,这将是重复的。但实际上我是在向0.2+.0.01询问Why **ocaml** gives0.21`。 不是关于IEEE 754浮点如何工作之类的问题;相反,它更像是 如何打印浮动 问题。你不能说所有关于花车的问题都是重复的吧? -
@JacksonTale:您的问题与我要链接的问题 (stackoverflow.com/questions/21895756/…) 没有根本不同。我链接的问题只有废话答案,对此我深表歉意。 (现在,如果测试是“关闭垃圾并且不关闭非垃圾”,我可能不会关闭这个。但事实并非如此;它是“VTC-as-duplicate questions 本质上是相同的问题。” )
标签: floating-point ocaml