2010-11-03 30 views
1

Comment contourner les angles auxquels la fonction tan (x) n'est pas définie, c'est-à-dire x! = Pi/2 + k * PI?Tangente, condition

J'ai essayé d'utiliser la condition:

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

mais il représente une condition

x = Pi/2 + k * PI/2.

Merci pour votre aide!.

+1

Notez également que certains algorithmes mathématiques peuvent nécessiter la valeur de tangente, lorsque 'cos (x) = 0' - vous pouvez implémenter votre propre variante de' tan (x) ', ce qui donnerait quelque chose comme' numeric_limits :: infinity() 'pour ce cas. –

Répondre

0

Que diriez-vous d'essayer

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

Trouvera vérifier les valeurs de x qui causent tan (x) être définie.

4

La même condition peut être utilisée pour déterminer quelles valeurs de cos (x) seront nulles. Merci à ce merveilleux fait, vous pouvez simplement effectuer les opérations suivantes (pseudo-code):

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

Edit: Comme In silico rappelle, ce résultat est de l'identité trigonométrique:

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

Dans cette forme, vous pouvez voir que les valeurs non définies apparaîtront où cos (x) = 0 en raison de la division par zéro.

+1

Cela fonctionne parce que tan (x) = sin (x)/cos (x) '. Lorsque 'cos (x)' est nul, la tangente sera indéfinie. Bien sûr, nous utilisons un epsilon ici parce que nous travaillons avec le point flottant. –

+0

+1 simplifier les maths d'abord, puis un programme simple suivra –

0

Ne pas utiliser la tangente? Il peut être plus performant que d'utiliser une paire (sinus, cosinus), mais généralement vous pouvez utiliser une paire (sinus, cosinus) sans vous soucier des discontinuités.

Pour quoi utilisez-vous la tangente?