2010-09-17 3 views
17

Existe-t-il une implémentation plus stable pour la fonction cotangente que return 1.0/tan (x) ;?Stable Cotangent

+0

Je suppose que vous êtes un problème avec 1/tan est que son indéfini à pi/2 lorsque la fonction devrait retourner zéro? – MerickOWA

+0

Faire l'inversion est douteux quand il est proche de pi/2 oui ... Je me demandais s'il y avait une meilleure façon de le faire. –

Répondre

36

cot(x) = cos(x)/sin(x) devrait être plus stable numériquement près de π/2 que cot(x) = 1/tan(x). Vous pouvez implémenter cela efficacement en utilisant sincos sur les plates-formes qui l'ont.

Une autre possibilité est cot(x) = tan(M_PI_2 - x). Cela devrait être plus rapide que ce qui précède (même si sincos est disponible), mais il peut également être moins précis, car M_PI_2 est bien sûr seulement une approximation du nombre transcendental π/2, donc la différence M_PI_2 - x ne sera pas exacte au complet la largeur d'une mantisse - en fait, si vous obtenez malchanceux, il peut avoir seulement quelques bits significatifs.

+0

Ok. Je suppose que c'est le meilleur que je peux faire. J'ai aussi appris à propos de sincos, que je dois avouer que je n'avais jamais rencontré auparavant! –

+2

Rappelez-vous juste une identité trig qui vous permet de faire beaucoup mieux et édité ma réponse. – zwol

+4

+1. Utilisez certainement tan (pi/2 - x). –