R: 奇怪的三角函数行为

5
作为一名从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

我希望了解是什么原因导致了这个问题,以及如何解决。谢谢!

5个回答

8

5
看起来对我来说一切正常。π的值可能不够精确,因此您得到了一个非常接近的估计值。如果您仔细想想,6.123234e-17和-1.836970e-16非常接近于0,而这就是答案应该是什么。
你的问题在于,在纸上,90*pi/180=pi/2,但在电脑中,我们使用浮点数。我不确定R/matlab使用什么,但我肯定猜测它们使用了32位或64位浮点数。而且,在有限的位数中只能存储有限的信息,因此无法存储每个可能的小数。
您可以修改函数,以便给定90或270时返回0。

1

同样的原因

1-(1/3)-(1/3)-(1/3)

不等于0。这与浮点数有关。我确定会有更多的阐述。


1

1
您可能也会对zapsmall函数感兴趣,它可以另一种方式显示接近0的数字为0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接