...

Source file src/math/atan2.go

Documentation: 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  // Atan2 returns the arc tangent of y/x, using
		 8  // the signs of the two to determine the quadrant
		 9  // of the return value.
		10  //
		11  // Special cases are (in order):
		12  //	Atan2(y, NaN) = NaN
		13  //	Atan2(NaN, x) = NaN
		14  //	Atan2(+0, x>=0) = +0
		15  //	Atan2(-0, x>=0) = -0
		16  //	Atan2(+0, x<=-0) = +Pi
		17  //	Atan2(-0, x<=-0) = -Pi
		18  //	Atan2(y>0, 0) = +Pi/2
		19  //	Atan2(y<0, 0) = -Pi/2
		20  //	Atan2(+Inf, +Inf) = +Pi/4
		21  //	Atan2(-Inf, +Inf) = -Pi/4
		22  //	Atan2(+Inf, -Inf) = 3Pi/4
		23  //	Atan2(-Inf, -Inf) = -3Pi/4
		24  //	Atan2(y, +Inf) = 0
		25  //	Atan2(y>0, -Inf) = +Pi
		26  //	Atan2(y<0, -Inf) = -Pi
		27  //	Atan2(+Inf, x) = +Pi/2
		28  //	Atan2(-Inf, x) = -Pi/2
		29  func Atan2(y, x float64) float64 {
		30  	if haveArchAtan2 {
		31  		return archAtan2(y, x)
		32  	}
		33  	return atan2(y, x)
		34  }
		35  
		36  func atan2(y, x float64) float64 {
		37  	// special cases
		38  	switch {
		39  	case IsNaN(y) || IsNaN(x):
		40  		return NaN()
		41  	case y == 0:
		42  		if x >= 0 && !Signbit(x) {
		43  			return Copysign(0, y)
		44  		}
		45  		return Copysign(Pi, y)
		46  	case x == 0:
		47  		return Copysign(Pi/2, y)
		48  	case IsInf(x, 0):
		49  		if IsInf(x, 1) {
		50  			switch {
		51  			case IsInf(y, 0):
		52  				return Copysign(Pi/4, y)
		53  			default:
		54  				return Copysign(0, y)
		55  			}
		56  		}
		57  		switch {
		58  		case IsInf(y, 0):
		59  			return Copysign(3*Pi/4, y)
		60  		default:
		61  			return Copysign(Pi, y)
		62  		}
		63  	case IsInf(y, 0):
		64  		return Copysign(Pi/2, y)
		65  	}
		66  
		67  	// Call atan and determine the quadrant.
		68  	q := Atan(y / x)
		69  	if x < 0 {
		70  		if q <= 0 {
		71  			return q + Pi
		72  		}
		73  		return q - Pi
		74  	}
		75  	return q
		76  }
		77  

View as plain text