2010-11-03 2 views
1

Как обойти углы, при которых функция tan (x) не определена, т.е. x! = Pi/2 + k * PI?Tangent, condition

Я пытался использовать условие:

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

но представляет условие

х = Pi/2 + к * PI/2

Спасибо за вашу помощь!.

+1

Также обратите внимание, что для некоторых математических алгоритмов может потребоваться значение касательной, когда 'cos (x) = 0' - вы можете реализовать свой собственный вариант' tan (x) ', который даст что-то вроде' numeric_limits :: infinity() 'для этого случая. –

ответ

0

Как о попытке

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

Найдет проверить для значений х, которые вызывают загар (х), чтобы быть неопределенным.

4

Такое же условие может быть использовано для определения того, какие значения cos (x) будут равны нулю. Благодаря этой удивительной самом деле, вы можете просто сделать следующее (псевдокод):

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

Edit: Как In silico указывает, что это результат тригонометрического тождества:

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

В этой форме вы можете видеть, что неопределенные значения будут отображаться везде, где cos (x) = 0 из-за деления на ноль.

+1

Это работает, потому что 'tan (x) = sin (x)/cos (x)'. Когда 'cos (x)' равно нулю, тангенс будет неопределенным. Конечно, мы используем epsilon здесь, потому что мы работаем с плавающей точкой. –

+0

+1 сначала упростите математику, затем последует простая программа –

0

Не использовать тангенс? Это может быть более результативным, чем использование пары (синус, косинус), но обычно вы можете использовать пару (синус, косинус), не беспокоясь о разрывах.

Для чего вы используете касательную?