The ACOS function returns the angle, expressed in radians, whose cosine is *X* (i.e., the arc-cosine). For real input, the range of ACOS is between 0 and Ï€.

For input of a complex number, Z = X + iY, the complex arccosine is given by,

acos(Z) = acos(B) - *i* alog(A + sqrt(A^{2} - 1)) if Y >= 0

acos(Z) = acos(B) + *i* alog(A + sqrt(A^{2} - 1)) if Y < 0

where

A = 0.5 sqrt((X + 1)^{2} + Y^{2}) + 0.5 sqrt((X - 1)^{2} + Y^{2})

B = 0.5 sqrt((X + 1)^{2} + Y^{2}) - 0.5 sqrt((X - 1)^{2} + Y^{2})

The separation of the two formulas at Y = 0 takes into account the branch-cut discontinuity along the real axis from -âˆž to -1 and +1 to +âˆž, and ensures that cos(acos(Z)) is equal to Z. For reference, see formulas 4.4.37-39 in Abramowitz, M. and Stegun, I.A., 1964: Handbook of Mathematical Functions (Washington: National Bureau of Standards).

## Examples

Find the angle whose cosine is 0.707 and print the result in degrees by entering:

PRINT, 180/!PI*ACOS(0.707)

IDL prints:

45.0086

Find the complex arccosine of 2 + i and print the result by entering:

PRINT, ACOS(COMPLEX(2,1))

IDL prints:

( 0.507356, -1.46935)

See the ATAN function for an example of visualizing the complex arccosine.

## Syntax

*Result* = ACOS(*X*)

## Return Value

Returns the angle, expressed in radians, whose cosine is *X* (i.e., the arc-cosine).

## Arguments

### X

The cosine of the desired angle. For real input, X should be in the range -1 to +1. If X is double-precision floating or complex, the result is of the same type. All other types are converted to single-precision floating-point and yield floating-point results. If X is an array, the result has the same structure, with each element containing the arc-cosine of the corresponding element of X.

## Keywords

### Thread Pool Keywords

This routine is written to make use of IDLâ€™s *thread pool*, which can increase execution speed on systems with multiple CPUs. The values stored in the !CPU system variable control whether IDL uses the thread pool for a given computation. In addition, you can use the thread pool keywords TPOOL_MAX_ELTS, TPOOL_MIN_ELTS, and TPOOL_NOTHREAD to override the defaults established by !CPU for a single invocation of this routine. See Thread Pool Keywords for details.

## Version History

Original |
Introduced |