代码之家  ›  专栏  ›  技术社区  ›  giraffehere

序列的奇数行为[重复]

  •  0
  • giraffehere  · 技术社区  · 8 年前

    我在一个简单的条件下遇到了一些非常不寻常的结果,真的需要其他人在他们的机器上运行这个来进行健康检查。代码如下:

    mySEQ <- seq(0.1, 1.0, by = 0.1)
    for (s in c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)) { print((s + .1) %in% mySEQ) }
    mySEQ[3] == 0.3
    

    这将导致:

    > mySEQ <- seq(0.1, 1.0, by = 0.1)
    > for (s in c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)) { print(s %in% mySEQ) }
    [1] TRUE
    [1] TRUE
    [1] FALSE
    [1] TRUE
    [1] TRUE
    [1] TRUE
    [1] FALSE
    [1] TRUE
    [1] TRUE
    [1] TRUE
    > mySEQ[3] == 0.3
    [1] FALSE
    > mySEQ[3]
    [1] 0.3
    

    我真的很困惑,为什么他们没有全部打印出TRUE。好像0.3和0.7有问题。我更新了R和我所有的包,但只需要其他人运行这个程序来检查是否只有我。它似乎与 seq 作用非常感谢。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Mark Timms    8 年前

    这与R中如何处理浮点数有关。有关详细信息,请阅读《R Inferno》的第一章:

    http://www.burns-stat.com/pages/Tutor/R_inferno.pdf

    要回答示例中的问题,请使用 all.equal 检查浮点数的相等性,而不是 == .