如何绕过函数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您的帮助!
如何绕过函数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您的帮助!
如何试图
(x - PI/2) % PI != 0
会发现检查x的导致棕褐色(x)的是未定义的值。
可以使用相同的条件来确定cos(x)的哪些值将为零。多亏了一件神奇的事情,你可以简单地做以下(伪):
SafeTan(x)
{
if (cos(x) < epsilon) { /* handle the error */ }
else { return tan(x); }
}
编辑:作为In silico指出,这是三角恒等式的结果:
在这种形式中,您可以看到,由于被零除,所以未定义的值将出现在cos(x)= 0的任何位置。
这是因为tan(x)= sin(x)/ cos(x)'。当cos(x)为零时,切线将不确定。当然,我们在这里使用了一个epsilon因为我们正在处理浮点。 – 2010-11-03 21:16:43
+1首先简化数学,然后一个简单的程序将跟随 – 2010-11-03 21:56:15
不要使用切线?它可以比使用(正弦,余弦)对更高效,但通常可以使用(正弦,余弦)对而不必担心不连续性。
你在用什么切线?
另请注意,当'cos(x)= 0'时,某些数学算法可能需要正切值 - 您可能想要实现自己的tan(x)'变体,这会产生类似'numeric_limits :: infinity()'的情况。 –
2010-11-03 21:36:03