Falling into the Floating Point Trap
1. Numerical error 还是 error
当 1/3 返回给你 33%时,这并不是错误。
这只是数学错误(Numerical error),编程语言帮我们将其内容保留位数了。
2. 浮点数的小bug
下面的例子:
> unique(c(.3, .4 - .1, .5 - .2, .6 - .3, .7 - .4))
[1] 0.3 0.3 0.3
参见:https://www.yuque.com/mugpeng/python/ivocbn#RO3qG
这是因为编程语言的浮点数计算都是转换为二进制计算,因此无法精确计算。
比如:
> print(.4 - .1, digits = 20)
[1] 0.30000000000000004441
> print(.5 - .2, digits = 20)
[1] 0.2999999999999999889
可是,为什么上面的例子中的unique 值是三个呢?