2011-03-02 61 views
2

我遇到Math.atan返回與輸入相同的值的問題。Math.atan()返回輸入

public double inchToMOA(double in, double range){ 
     double rangeIn = 36*range; 
     double atan = (in/rangeIn) * -1.0; 
     double deg = Math.atan(atan); 
     double moa = deg * 60; 
     return moa; 
    } 

我有這一切在同一行,但我打破了它分解成不同的變量,如果我能找出爲什麼它不工作。如果in = -10且range = 300,那麼atan大約是-.00094。角度應該是-.053度,但math.atan返回-00094,與輸入相同。

math.atan對我來說太小了嗎?

+0

你在這裏的代碼似乎是正確的;你確定這個錯誤不是別的嗎? – templatetypedef 2011-03-02 02:04:00

回答

3

反正切這裏描述:

http://mathworld.wolfram.com/InverseTangent.html

我不認爲你的說法是這裏的問題。

當然,你意識到計算機三角函數的處理方式是弧度而不是度數,對吧?

+0

我不知道這是弧度,這將解釋它謝謝! – Matt 2011-03-02 02:15:54

+0

@Matt - 你必須跳過那些高中數學課:-) – 2011-03-02 04:25:18

+1

爲什麼我會跳過它們?一個人得在某個地方睡一會兒! :)有時候,我會在經過數小時和數小時的編寫代碼後得到一點點烘焙......「它正在處理!@#!$計算器爲什麼不在......哦......」 – Matt 2011-03-02 07:20:50

1

可能就是這樣。如果你看一下正切函數的數學嚴格的定義,你看到了什麼,如果是tan(x) = sin(x)/cos(x)爲「×」

lim x->0, sin(x) = x 
lim x->0, cos(x) = 1 

因此小的值,你可以看到lim x->0, tan(x) -> x這意味着它的逆,反正切,返回值它被給出。至於Math.atan的數值準確性,我認爲作者已經竭盡全力確保它的數值準確性。

1

Math.atan沒有問題。它的值接近1:1線性,與原點相交,輸入接近零。所以你越接近零就會有更少的輸入變化。

+0

根據我的計算器,它應該是返回-.053。 atan(-10/10800)= atan -.00094 = -.053 – Matt 2011-03-02 02:13:19

+0

@Matt是你的計算器設置爲度數? 0.053度約爲0.0009弧度。 – 2011-03-02 02:13:53

+0

哎呀,如果它是弧度,它不會有太大的變化。謝謝! – Matt 2011-03-02 02:16:25