R:奇怪的触发函数行为。

| 当Matlab用户过渡到R时,我遇到了将三角函数应用于度的问题。在Matlab中,弧度和度都有三角函数(分别是cos和cosd)。 R似乎只包含弧度的函数,因此需要我创建自己的函数(请参见下文)
cosd<-function(degrees) {
  radians<-cos(degrees*pi/180)
  return(radians)
}
不幸的是,此功能并非始终都能正常工作。一些结果如下所示。
> cosd(90)
[1] 6.123234e-17
> cosd(180)
[1] -1
> cosd(270)
[1] -1.836970e-16
> cosd(360)
[1] 1
我想了解造成此问题的原因以及解决方法。谢谢!     
已邀请:
这是浮点运算:
> all.equal(cosd(90), 0)
[1] TRUE
> all.equal(cosd(270), 0)
[1] TRUE
如果那是“无法正常工作”的意思? 这也是一个常见问题解答:http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f     
看起来对我来说很好。 pi的值可能不够精确,因此您得到的估算值非常接近。如果考虑一下,6.123234e-17和-1.836970e-16非常非常接近0,这应该是答案。 您的问题在于,尽管纸上90 * pi / 180 = pi / 2,但在计算机中,我们使用浮点数。我不确定使用什么R / matlab,但是我肯定会猜测是32位还是64位浮点数。而且,您只能在有限的位数中容纳太多信息,因此您无法存储所有可能的小数。 您可以修改函数,以便给定90或270,返回0。     
这是浮点表示错误。参见http://lib.stat.cmu.edu/s/Spoetry/Tutor/R_inferno.pdf的第1章     
同样的原因
1-(1/3)-(1/3)-(1/3)
不等于0。它与浮点数有关。我敢肯定会有更多的阐述。     
您可能还对zapsmall函数感兴趣,希望以另一种方式将接近0的数字显示为0。     

要回复问题请先登录注册