所以,我有一个问题,主要是出于好奇。我在用Paul Teetor's 学习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
[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认为π在第4行是3.141593,而不是在第5行,然后回到第6行的3.141593,改变了7的想法,等等。有谁知道这个口译员犹豫不决的原因是什么吗?
发布于 2013-07-02 14:30:57
我可不这么做,
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位数的真,这是可以理解的,因为双倍的有限精度。
https://stackoverflow.com/questions/17428167
复制相似问题