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 とは何かについて相反する意見を私に与えているようです。または、より明確に示すために、2 つを行列に入れました。

> 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 は 4 行目で pi を 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 を返します。これは double の精度が有限であるため理解できます。

于 2013-07-02T14:30:57.367 に答える