Understanding Arccos(x) for Values Outside [-1, 1]

  • Thread starter Thread starter Philosophaie
  • Start date Start date
AI Thread Summary
The discussion centers on the implications of calculating arccos(x) for values outside the range of [-1, 1]. It highlights that for real numbers, the cosine function is restricted to this interval, and values exceeding this range necessitate the use of complex numbers. The conversation explains that when |u| > 1, arccos(u) results in a complex number, and provides methods for solving the corresponding equations using complex analysis. Additionally, it addresses practical approaches for handling slight deviations from the interval, suggesting alternative calculations like using atan2 to avoid precision errors. Overall, the thread emphasizes the importance of recognizing numerical errors when working with cosine and its inverse in real applications.
Philosophaie
Messages
456
Reaction score
0
What happens if you have to take the arccos of a number greater than 1 or less than -1.

I know from a right triangle if you have:

[ tex ]\Theta[ /tex ]=arccos(x)

if you use x as the adjacent side, 1 as the hypotenuse and [ tex ]\sqrt{1-x^2}[ /tex ] as the opposite.

Is that where the negative sign start?

I have an equation that has numbers from -1.01 to 1.01 as inputs "x". The output runs from 0 to 180 without the numbers 180 to 359 or any negative numbers.

Where do I find the negative or the higher angles?
 
Last edited:
Mathematics news on Phys.org
Cos and sin of real variables are confined to the [-1,1] range. To get outside this range, you have to use complex numbers, i.e. cos(z) where z is complex. To get arccos of u, when |u| > 1, you will end up with a complex number.
 
As mathman said, for any real x, cos(x) lies in the interval [-1, 1]. To go outside that you must look for a complex z.

For z a complex number, cos(z)= (e^z+ e^{-z})/2. If y> 1, you must solve (e^z+ e^{-z})/2= y for y. One way to do that is to let x= e^z so that the equation is so that the equation becomes x+ 1/x= 2y. Multiplying through by x, that gives the quadratic equation x^2+ 1= 2xy or x^2- 2y x+ 1= 0. Solve that with the quadratic formula.
 
HallsofIvy said:
As mathman said, for any real x, cos(x) lies in the interval [-1, 1]. To go outside that you must look for a complex z.

For z a complex number, cos(z)= (e^z+ e^{-z})/2. If y> 1, you must solve (e^z+ e^{-z})/2= y for y. One way to do that is to let x= e^z so that the equation is so that the equation becomes x+ 1/x= 2y. Multiplying through by x, that gives the quadratic equation x^2+ 1= 2xy or x^2- 2y x+ 1= 0. Solve that with the quadratic formula.

Actually, cos(z) = (e^(i z) + e^(-iz))/2. However, as long as you let x=e^(i z), you'll still be able to take the same approach to solve the problem.
 
When dealing with computers, it is at times very easy to arrive at some value that is supposed to be the cosine of a real (rather than complex) angle but the computed value is slightly outside the interval [-1, 1].

Suppose the variable in question is costheta and from this you want to compute the value of theta. A fairly standard approach is
  • If costheta is between -1 and +1 use theta=acos(costheta).
  • If costheta is less than -1 by a small amount, use theta=M_PI.
  • If costheta is greater than +1 by a small amount, use theta=0.
  • Otherwise, croak. The angle is supposed to be real, not complex, so the odds are that a mistake was made somewhere along the way in calculating costheta.

A similar concern exists for sine, where values slightly less than -1 map to -pi/2, slightly greater than 1 to pi/2.

That said, there are (at least) a couple of other options if you can simultaneously compute costheta and sintheta. One approach is to use
  • theta=asin(sintheta) if abs(sintheta)<abs(costheta),
  • theta=acos(costheta), otherwise.
This simultaneously avoids the range error problem and avoids precision loss problems. Calling acos or asin with an argument -1 or +1 loses several bits of precision.

An even easier approach is to use atan2(sintheta, costheta) or atan2(costheta, sintheta), depending on the language.
 
Char. Limit said:
Actually, cos(z) = (e^(i z) + e^(-iz))/2. However, as long as you let x=e^(i z), you'll still be able to take the same approach to solve the problem.
Yes, thanks.
 
In general, arccos(x) = (1/i)*log(x + sqrt(x2-1)) = (1/i)*log(x + i*sqrt(1-x2))

So arccos(x) = -i*arccosh(x) if x > 1
 
Given the ranges of values in the original post, this problem is not about extending cosine and its inverse to the complex numbers. I strongly suspect the underlying problem here is dealing with the numerical errors that result in calculating some number that is supposed to be the cosine of some real (not complex!) number.
 

Similar threads

Replies
1
Views
2K
Replies
5
Views
2K
Replies
1
Views
2K
Replies
10
Views
2K
Back
Top