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

  • Context: Undergrad 
  • Thread starter Thread starter Philosophaie
  • Start date Start date
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
7 replies · 25K views
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:
Physics 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, [itex]cos(z)= (e^z+ e^{-z})/2[/itex]. If y> 1, you must solve [itex](e^z+ e^{-z})/2= y[/itex] for y. One way to do that is to let [itex]x= e^z[/itex] so that the equation is so that the equation becomes [itex]x+ 1/x= 2y[/itex]. Multiplying through by x, that gives the quadratic equation [itex]x^2+ 1= 2xy[/itex] or [itex]x^2- 2y x+ 1= 0[/itex]. 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, [itex]cos(z)= (e^z+ e^{-z})/2[/itex]. If y> 1, you must solve [itex](e^z+ e^{-z})/2= y[/itex] for y. One way to do that is to let [itex]x= e^z[/itex] so that the equation is so that the equation becomes [itex]x+ 1/x= 2y[/itex]. Multiplying through by x, that gives the quadratic equation [itex]x^2+ 1= 2xy[/itex] or [itex]x^2- 2y x+ 1= 0[/itex]. 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.
 
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.