2015-03-17 46 views
5

Z mojego rozumienia, funkcja atan2() istnieje w językach programowania, ponieważ sama nie może zawsze określić poprawnego theta, ponieważ wyjście jest ograniczone do -pi/2 do pi/2.Dlaczego nie ma funkcji asin2() i acos2() podobnych do atan2()?

Jeśli jest to przypadek, to ten sam problem dotyczy zarówno asin() i acos(), obaj również ograniczonej zakresy, tak to dlaczego nie ma asin2() i acos2() funkcje?

Odpowiedz

5

Po pierwsze, należy pamiętać, że składnia to atan(y/x), ale atan2(y, x), a nie atan2(y/x). Jest to ważne, ponieważ nie wykonując podziału, podajesz dodatkowe informacje, przede wszystkim indywidualne znaki x i y. Jeśli znasz współrzędne x i y, znasz kąt, łącznie z kwadrantem.

Jeśli pójdziesz z tan(θ) = y/x do sin(θ) = y/sqrt(x²+y²), wówczas operacja odwrotna asin trwa y i sqrt(x²+y²) i łączy, że aby uzyskać pewne informacje o tym kątem. Tutaj nie ma znaczenia, czy wykonamy podział samodzielnie, czy też możemy obsłużyć jakąś hipotetyczną funkcję asin2. Mianownik jest zawsze dodatni, więc podzielony argument zawiera tyle informacji, ile zawiera oddzielny licznik i mianownik. (Co najmniej w IEEE środowisku, w którym dzielenie przez zero prowadzi do poprawnie podpisane nieskończoność).

Jeśli wiadomo, że y współrzędnych i hypothenuse sqrt(x²+y²) wtedy wie, sinus kąta, lecz nie może znać sam kąt , ponieważ nie można rozróżnić wartości ujemnych od dodatnich x. Podobnie, jeśli znasz współrzędną x i hipotezę, znasz cosinus kąta, ale nie możesz znać znaku wartości y.

Tak więc asin2 i acos2 nie są matematycznie wykonalne, przynajmniej nie w oczywisty sposób. Gdybyś miał jakiś znak zakodowany w hipotezie, rzeczy mogą być inne, ale nie mogę wymyślić żadnej sytuacji, w której taki znak pojawiłby się naturalnie.

+1

Zgadzam się. Domena 'sin (x)' to 'x = -π/2 ... π/2' oraz' cos (x) 'to' x = 0..π'. Istnieje _nie_ droga 'acos()' zwróci liczbę ujemną, ponieważ 'cos (x) = cos (-x)'. – ja72

+3

Pierwsze zdanie, jeśli jest bardzo mylące. – Dan