作为一个过渡到R的Matlab用户,我遇到了将三角函数应用于度的问题.在Matlab中,有弧度和度数的三角函数(例如分别为cos和cosd).R似乎只包含弧度函数,因此需要我创建自己的函数(见下文)
cosd<-function(degrees) {
radians<-cos(degrees*pi/180)
return(radians)
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,此功能始终无法正常工作.一些结果如下所示.
> cosd(90)
[1] 6.123234e-17
> cosd(180)
[1] -1
> cosd(270)
[1] -1.836970e-16
> cosd(360)
[1] 1
Run Code Online (Sandbox Code Playgroud)
我想了解导致这种情况的原因以及如何解决这个问题.谢谢!
这是浮点运算:
> all.equal(cosd(90), 0)
[1] TRUE
> all.equal(cosd(270), 0)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
如果你的意思是"不能正常工作"?
这也是一个FAQ: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.
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |