Home | History | Annotate | Download | only in math
      1 // Copyright 2009 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package math
      6 
      7 /*
      8 	Floating-point arcsine and arccosine.
      9 
     10 	They are implemented by computing the arctangent
     11 	after appropriate range reduction.
     12 */
     13 
     14 // Asin returns the arcsine, in radians, of x.
     15 //
     16 // Special cases are:
     17 //	Asin(0) = 0
     18 //	Asin(x) = NaN if x < -1 or x > 1
     19 func Asin(x float64) float64
     20 
     21 func asin(x float64) float64 {
     22 	if x == 0 {
     23 		return x // special case
     24 	}
     25 	sign := false
     26 	if x < 0 {
     27 		x = -x
     28 		sign = true
     29 	}
     30 	if x > 1 {
     31 		return NaN() // special case
     32 	}
     33 
     34 	temp := Sqrt(1 - x*x)
     35 	if x > 0.7 {
     36 		temp = Pi/2 - satan(temp/x)
     37 	} else {
     38 		temp = satan(x / temp)
     39 	}
     40 
     41 	if sign {
     42 		temp = -temp
     43 	}
     44 	return temp
     45 }
     46 
     47 // Acos returns the arccosine, in radians, of x.
     48 //
     49 // Special case is:
     50 //	Acos(x) = NaN if x < -1 or x > 1
     51 func Acos(x float64) float64
     52 
     53 func acos(x float64) float64 {
     54 	return Pi/2 - Asin(x)
     55 }
     56