2010-11-03 27 views
1

如何繞過函數tan(x)未定義的角度,即x!= Pi/2 + k * PI?切線,條件

我試圖使用條件:

(x != 0) && (2 * x/M_PI - (int)(2 * x/M_PI)) < epsilon, 

但它代表的條件

X =π/ 2 + K * PI/2

thanx您的幫助!

+1

另請注意,當'cos(x)= 0'時,某些數學算法可能需要正切值 - 您可能想要實現自己的tan(x)'變體,這會產生類似'numeric_limits :: infinity()'的情況。 – 2010-11-03 21:36:03

回答

0

如何試圖

(x - PI/2) % PI != 0 

會發現檢查x的導致棕褐色(x)的是未定義的值。

4

可以使用相同的條件來確定cos(x)的哪些值將爲零。多虧了一件神奇的事情,你可以簡單地做以下(僞):

SafeTan(x) 
{ 
    if (cos(x) < epsilon) { /* handle the error */ } 
    else { return tan(x); } 
} 

編輯:作爲In silico指出,這是三角恆等式的結果:

tan(x) = sin(x)/cos(x)

在這種形式中,您可以看到,由於被零除,所以未定義的值將出現在cos(x)= 0的任何位置。

+1

這是因爲tan(x)= sin(x)/ cos(x)'。當cos(x)爲零時,切線將不確定。當然,我們在這裏使用了一個epsilon因爲我們正在處理浮點。 – 2010-11-03 21:16:43

+0

+1首先簡化數學,然後一個簡單的程序將跟隨 – 2010-11-03 21:56:15

0

不要使用切線?它可以比使用(正弦,餘弦)對更高效,但通常可以使用(正弦,餘弦)對而不必擔心不連續性。

你在用什麼切線?