相关疑难解决方法(0)

为什么这些数字不相等?

以下代码显然是错误的.有什么问题?

i <- 0.1
i <- i + 0.05
i
## [1] 0.15
if(i==0.15) cat("i equals 0.15") else cat("i does not equal 0.15")
## i does not equal 0.15
Run Code Online (Sandbox Code Playgroud)

floating-point r floating-accuracy r-faq

263
推荐指数
4
解决办法
4万
查看次数

R中的数字比较难度

我试图比较R中的两个数字作为if语句条件的一部分:

(a-b) >= 0.5

在这个特定的例子中,a = 0.58和b = 0.08 ......但仍然(a-b) >= 0.5是假的.我知道使用==确切数字比较的危险,这似乎有关:

(a - b) == 0.5) 是假的,而

all.equal((a - b), 0.5) 是真的.

我能想到的唯一解决方案是有两个条件:(a-b) > 0.5 | all.equal((a-b), 0.5).这有效,但这真的是唯一的解决方案吗?我应该=永远地宣誓比较运营商的家庭吗?

为清晰起见编辑:我知道这是一个浮点问题.更重要的是,我要问的是:我该怎么做呢?什么是处理R中大于或等于比较的合理方法,因为>=它不能真正被信任?

floating-point comparison r comparison-operators r-faq

42
推荐指数
4
解决办法
2万
查看次数

> =不工作,R

我正在运行下面的代码.函数Ax返回值1.但是ifelse语句不识别Ax == 1.

我已经尝试使函数的输出为双精度,所有数值都加倍.这没效果.

我希望:
1)帮助解决此特定情况
2)获取有关如何避免此问题的提示

Axfun<-function(beta,gamma,a,b,g,H0stud,Wh,Wi){ 
  ((b*beta + g*gamma)*(1 + 2*g*gamma)*(1 + gamma + b*((-beta)*(1 + gamma) + a*(-1 + beta)*(1 + g*gamma)))*H0stud*Wi)/
    ((-1 + b*beta)*(1 + gamma)*((-g)*gamma*(1 + 2*g*gamma)*Wi + b*beta*((-1 + g*gamma*(-2 + H0stud) + H0stud)*Wh - (1 + g*gamma)*H0stud*Wi)))
}

Ax<-Axfun(2^1,
          2^0,
          2^0,
          2^-3,
          2^-1,
          1,
          1,
          0.4)

ifelse(Ax>=1, 0, Ax)
Run Code Online (Sandbox Code Playgroud)

double logic if-statement r

0
推荐指数
1
解决办法
940
查看次数