2010-11-03 43 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

不要使用切线?它可以比使用(正弦,余弦)对更高效,但通常可以使用(正弦,余弦)对而不必担心不连续性。

你在用什么切线?