ocaml中奇怪的算术精度

时间:2011-12-01 21:13:20

标签: floating-point ocaml

  

可能重复:
  Is JavaScript's Math broken?

我在OCaml中算术精度方面存在奇怪的问题。看:

# 1.1+.2.2;;
 - : float = 3.30000000000000027

只有当我这样做时才会发生:something.1 + something.2。有人可以试试吗?

2 个答案:

答案 0 :(得分:5)

这是使用浮点值的现实。虽然1.1精确地以十进制表示,但有两位数,但它需要无限数量的二进制数来表示该值。由于您使用有限数量的位存储1.1二进制,因此会出现舍入错误。

答案 1 :(得分:1)

Ocaml浮点数是IEEE754双精度数。您将在其他编程语言中具有相同的行为。也许你想要浮动bignums(Ocaml不提供)。

计算机始终具有有限精度的原始数字(很像计算器)。