Falling into the Floating Point Trap

1. Numerical error 还是 error

当 1/3 返回给你 33%时,这并不是错误。

这只是数学错误(Numerical error),编程语言帮我们将其内容保留位数了。

2. 浮点数的小bug

下面的例子:

  1. > unique(c(.3, .4 - .1, .5 - .2, .6 - .3, .7 - .4))
  2. [1] 0.3 0.3 0.3

参见:https://www.yuque.com/mugpeng/python/ivocbn#RO3qG

这是因为编程语言的浮点数计算都是转换为二进制计算,因此无法精确计算。

比如:

  1. > print(.4 - .1, digits = 20)
  2. [1] 0.30000000000000004441
  3. > print(.5 - .2, digits = 20)
  4. [1] 0.2999999999999999889

可是,为什么上面的例子中的unique 值是三个呢?