2016-09-14 76 views
-6

我想了解Math.tan方法背後的數學,但它沒有任何意義。有人可以向我解釋它是如何工作的嗎?Math.tan(x)如何實際工作? (Javascript)

首先求解切線角度的數學公式是Tangent = Opposite/Adjacent。這意味着我需要知道三角形的兩邊來確定切線角度。然而,Math.tan方法只接受一個以弧度爲單位的參數,而不是兩側的長度,所以我不明白它是如何計算切線的角度的。

接下來在示例中,它們顯示將不可思議的巨大弧度值傳遞給方法並獲取值。例如,W3學校展示Math.tan(90)的示例,但90弧度等於5,156.6度,這對於直角三角形的角是不可能的角度。

請問這個方法的工作,發生了什麼事,輪流90個弧度成-1.995200412208242

+0

您是否閱讀過精美的文檔? – Braiam

+6

我投票結束這個問題作爲題外話題,因爲這個問題是對底層數學概念缺乏最基本的理解。這個問題屬於http://math.stackexchange.com/ – Oriol

+0

它可能會在後臺執行'angle%(2 * PI)'來獲得一個角度範圍。 –

回答

0

首先切線角度幕後讓我們來談談切線是什麼:切線y/x在一個特定的點的座標(舉例來說,參見this YouTube video)。

所以,如果你想要pi上的2的切線,在一個90度角的圖上,所以座標是(0, 1)。然後你只分1/0

但是,Math.tan不是很精確。在Chrome 52中,Math.tan(Math.PI/2)(來自上面的視頻)是16331239353195370,儘管它應該評估爲JavaScript中的值爲Infinity(數學值實際上未定義,因爲它的結果爲1/0)。

this answer,V8的實現是:

function MathTan(x) { 
    return MathSin(x)/MathCos(x); 
} 

(補充說明:該鉻實際輸出比Number.MAX_SAFE_INTEGER,您可以通過運行Number.MAX_SAFE_INTEGER < Math.tan(Math.PI/2) // => true證明較大,因此Chrome需要它的價值是「接近無窮大」。)

編輯

的原因缺乏精確值的是,PI通常表示爲一個固定值(因爲我們有在計算機MEMOR侷限性y),即使在編程環境之外它應該是「無限」或「未定義」。例如,在我的瀏覽器中,Math.PI固定爲3.141592653589793

+3

「即使它應該」 - 它應該用於「π/ 2」,而你有'Math.PI/2'。 'π'是不合理的。 「但是,Math.tan不是很精確」 - 它不是'Math.tan'問題。 – zerkms

+0

它將罪分爲COS,就是這樣! :) – efarley

+0

@zerkms感謝您的評論。很好的澄清。我的意思是在編程之外的世界裏,'pi/2'應該是「Inifinity」或「undefined」,但是我們在計算機內存中可以容納的數字有限制。因此,例如,我的瀏覽器中的Math.PI只有'3.141592653589793'。 –