2011-04-27 88 views
4

作爲一個Matlab用戶過渡到R,我遇到了應用三角函數度數的問題。在Matlab中,弧度和度都有三角函數(分別爲cos和cosd)。 [R似乎只包括弧度的功能,因此要求我創造我自己的(見下文)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 

我想知道是什麼原因造成這個問題以及如何解決這個問題。謝謝!

回答

1

第1章同樣的原因,

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

不等於0。它是與浮點數。我相信會有更多的細節。

5

看起來它對我來說工作得很好。 pi的值可能不夠精確,所以你得到一個非常接近的估計。如果你仔細想想,6.123234e-17和-1.836970e-16非常接近0,這就是答案。

您的問題在於,紙張上的90 * pi/180 = pi/2,在計算機中我們使用浮點數。我不確定R/matlab使用什麼,但我肯定會猜測32位或64位浮點數。而且你只能在有限的位數中容納很多信息,所以你不能存儲每一個可能的小數。

您可以修改您的函數,以便給90或270,返回0。

1

您還可能有興趣在目前顯示的是接近0 0

數的另一種方式zapsmall功能