R rep函数返回错误的元素数

R rep函数返回错误的元素数,r,R,我在R版本3.1.2中运行了以下代码: > 7 - (.05+.1)/.05 [1] 4 > rep(NA, 4) [1] NA NA NA NA > rep(NA, 7 - (.05+.1)/.05) [1] NA NA NA 请注意,上一次rep调用返回了3个NAs,而不是4个,即使7-(.05+.1)/.05=4。其他人能复制同样的错误吗?有什么简单的解释吗 7.31为什么R不认为这些数字相等 在R的数字类型中,唯一可以精确表示的数字是分母为2的幂的整数和分数。其

我在R版本3.1.2中运行了以下代码:

> 7 - (.05+.1)/.05
[1] 4
> rep(NA, 4)
[1] NA NA NA NA
> rep(NA, 7 - (.05+.1)/.05)
[1] NA NA NA   
请注意,上一次
rep
调用返回了3个NAs,而不是4个,即使
7-(.05+.1)/.05=4
。其他人能复制同样的错误吗?有什么简单的解释吗

7.31为什么R不认为这些数字相等

在R的数字类型中,唯一可以精确表示的数字是分母为2的幂的整数和分数。其他数字必须四舍五入到(通常)53位二进制数字的精度。因此,两个浮点数将不会可靠地相等,除非它们是通过相同的算法计算的,并且不总是偶数。比如说

R> a <- sqrt(2)
R> a * a == 2
[1] FALSE
R> a * a - 2
[1] 4.440892e-16
(7-(.05+.1)/.05)=4#[1]假
rep(NA,3.9)#[1]NA-NA-NA
这是R常见问题7.31:试试
sprintf(%.30f),7-(.05+.1)/.05)
。正如你所看到的,不是4而是3.999999。。。所以当
rep
内部调用
as.integer(3.99999)
时,它会得到3。。。
7L - (.05+.1)/.05 == 4
[1] FALSE

round(7L - (.05+.1)/.05) == 4
[1] TRUE