2013-07-02 3 views
0

그래서 여기에 제가 주로 호기심에서 벗어난 질문이 있습니다. Pi를 Paul Teetor's R Cookbook으로 배우고 있습니다. 나는이 이상한 가로 질러 왔을 때 나는 명령의 일부 주위를 연주했다 : 그래서 R이 파이는 것으로 간주 것을 확인파이는 파이가 아니지만 파이는 파이입니다 .... 파이는 파이가 아니지만?

> 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 

,

> 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은 파이 라인 (6)에 다시 3.141593로, 5 행에 다음 라인 4에없는 것을 3.141593을 것으로 간주합니다 , ch 7시에 정신이 분노하고 있습니다. 누구는이 통역관의 우유부단의 원인이 무엇인지 압니까?

+2

아마도 정밀도가 충분하지 않을 수 있습니다. * difference *, 즉'(v - pi)'(또는 R 구문이 무엇이든간에)을 표시해보십시오. –

+1

아마도 http://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal과 관련이 있습니다. – GSee

+0

또한이 항목을 클릭하면 [this] (http://stackoverflow.com) 될 수 있습니다./questions/9508518/why-are-these-numbers-not-equal) 문제는 다른 점이 있습니까? 'isTRUE (all.equal())'를 시도하십시오. –

답변

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를 반환합니다.

+0

그래, 그 4 번 '파이'를 반복하십시오. 나는 v의 마지막 네 요소가 pi, 3.14159265359, (pi에서 100 자리까지), 3.141593이라는 중요한 포인트에 대해서는 언급하지 않았다. 그래서 R은 십진수를 넘어서 15 자리로 pi를 취하기 때문에 그 행동을 취하는 이유입니다. – BrotherJack

관련 문제