0

所以这是我主要出于好奇而提出的一个问题。我正在使用Paul Teetor 的R Cookbook学习 Pi 。当我遇到这个奇怪时,我正在玩一些命令:

> v
[1] 3.000000 3.140000 4.000000 3.141593 3.141593 3.141593 3.141593
> pi == v
[1] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE

所以检查 R 认为 pi 是什么,

> pi
[1] 3.141593

显然,R 给了我关于 pi 是什么的相互矛盾的意见,或者为了更清楚地表明它,我将两者放入一个矩阵中:

> v <- c(v, pi==v)
> mat <- matrix(v, 7, 2)
> mat
         [,1] [,2]
[1,] 3.000000    0
[2,] 3.140000    0
[3,] 4.000000    0
[4,] 3.141593    1
[5,] 3.141593    0
[6,] 3.141593    1
[7,] 3.141593    0

所以显然 R 认为 pi 在第 4 行是 3.141593,然后在第 5 行不是,然后在第 6 行回到 3.141593,在第 7 行改变主意等等。有谁知道这位翻译犹豫不决的原因是什么?

4

1 回答 1

3

我没有得到相同的行为,

test <- function(digits, replications=10)
  c(representation = as.character(signif(pi, digits)), 
    equality = any(replicate(replications, pi == signif(pi, digits))))

t(sapply(1:16, test))

      representation     equality
 [1,] "3"                "FALSE" 
 [2,] "3.1"              "FALSE" 
 [3,] "3.14"             "FALSE" 
 [4,] "3.142"            "FALSE" 
 [5,] "3.1416"           "FALSE" 
 [6,] "3.14159"          "FALSE" 
 [7,] "3.141593"         "FALSE" 
 [8,] "3.1415927"        "FALSE" 
 [9,] "3.14159265"       "FALSE" 
[10,] "3.141592654"      "FALSE" 
[11,] "3.1415926536"     "FALSE" 
[12,] "3.14159265359"    "FALSE" 
[13,] "3.14159265359"    "FALSE" 
[14,] "3.1415926535898"  "FALSE" 
[15,] "3.14159265358979" "FALSE" 
[16,] "3.14159265358979" "TRUE"  

仅对 16 位返回 TRUE,这是可以理解的,因为双精度数有限。

于 2013-07-02T14:30:57.367 回答