考虑以下 R 函数
is.sqrt <- function(x, y){
if(x^2 == y) TRUE
else FALSE
}
它回答 x 是否是 y 的平方根。如果 y 是一个完美的正方形,则该函数的行为符合预期 - is.sqrt(2,4) 返回 TRUE,is.sqrt(3,4) 返回 FALSE。如果 y 不是完美的正方形,就会出现问题。例如,
is.sqrt(sqrt(2), 2)
返回假。通过计算可以看出其中的原因
sqrt(2)^2 - 2
返回 4.440892e-16。关于如何解决这个问题,我的第一个想法是在将 x^2 与 y 进行比较之前对其进行舍入,但是适当舍入多少?这甚至是推荐的方法吗? R 中是否有处理浮点精度的标准方法?
请您参考如下方法:
您可以在您的函数中使用 all.equal
,它“测试两个对象是否‘几乎’相等”
is.sqrt <- function(x, y){
isTRUE(all.equal(x^2,y)
}
is.sqrt(sqrt(2), 2)
# TRUE
is.sqrt(sqrt(2), 3)
# FALSE