Czy istnieje bardziej stabilna implementacja funkcji cotangens niż return 1.0/tan (x) ;?Stabilny Cotangent
Odpowiedz
cot(x) = cos(x)/sin(x)
powinna być bardziej stabilna numerycznie blisko π/2 niż cot(x) = 1/tan(x)
. Możesz to efektywnie zaimplementować przy użyciu sincos
na platformach, które go mają.
Inną możliwością jest cot(x) = tan(M_PI_2 - x)
. Powinno to być szybsze niż powyższe (nawet jeśli dostępne jest sincos
), ale może być również mniej dokładne, ponieważ M_PI_2
jest oczywiście tylko przybliżeniem liczby transcendentalnej π/2, więc różnica M_PI_2 - x
nie będzie dokładna w pełni szerokość mantysy double
- w rzeczywistości, jeśli masz pecha, może mieć tylko kilka znaczących bitów.
Ok. Sądzę, że to jest najlepsze, co mogę zrobić. Dowiedziałem się także o sincosie, które muszę przyznać, że nigdy wcześniej się nie spotkałem! –
Właśnie przypomniałem sobie tożsamość trig, która pozwala ci zrobić znacznie lepiej i zredagować moją odpowiedź. – zwol
+1. Zdecydowanie użyj tan (pi/2 - x). –
Zakładam, że masz problem z 1/tan jest to, że jego niezdefiniowane na pi/2, gdy funkcja powinna zwrócić zero? – MerickOWA
Wykonanie inwersji jest podejrzane, gdy zbliżamy się do pi/2 tak ... Zastanawiałem się, czy istnieje lepszy sposób na zrobienie tego. –