IT干货网

r之如何处理 R 中的浮点错误

powertoolsteam 2024年11月24日 编程设计 49 0

考虑以下 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 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!