为什么1不总是等于1?

时间:2014-05-22 08:46:29

标签: r floating-point

试图找到一组数字的所有组合,加起来我偶然发现了一个我无法解释的行为:

我从集合{0,0.1,...,0.9,1},

计算组合的数据帧
foo <- expand.grid(a = seq(0, 1, 0.1),
                   b = seq(0, 1, 0.1),
                   c = seq(0, 1, 0.1))

总结各个组合值,

foo$sum <- apply(foo, 1, sum)

并检查总和是否等于1.

foo$t <- foo$sum == 1

奇怪的结果是并非所有等于1的总和都是这样评价的(即,由值0.6,0.3和0.1组成的所有组合不总和为1)。

> foo[161,]
      a   b   c sum     t
161 0.6 0.3 0.1   1 FALSE
> foo[171,]
      a   b   c sum    t
171 0.5 0.4 0.1   1 TRUE

为什么R不将1识别为1?我错过了什么?

> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=de_DE.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=de_DE.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=de_DE.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_3.0.2

0 个答案:

没有答案