1.\" $OpenBSD: atan2.3,v 1.17 2015/01/15 19:06:31 schwarze Exp $ 2.\" Copyright (c) 1991 The Regents of the University of California. 3.\" All rights reserved. 4.\" 5.\" Redistribution and use in source and binary forms, with or without 6.\" modification, are permitted provided that the following conditions 7.\" are met: 8.\" 1. Redistributions of source code must retain the above copyright 9.\" notice, this list of conditions and the following disclaimer. 10.\" 2. Redistributions in binary form must reproduce the above copyright 11.\" notice, this list of conditions and the following disclaimer in the 12.\" documentation and/or other materials provided with the distribution. 13.\" 3. Neither the name of the University nor the names of its contributors 14.\" may be used to endorse or promote products derived from this software 15.\" without specific prior written permission. 16.\" 17.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27.\" SUCH DAMAGE. 28.\" 29.\" from: @(#)atan2.3 5.1 (Berkeley) 5/2/91 30.\" 31.Dd $Mdocdate: January 15 2015 $ 32.Dt ATAN2 3 33.Os 34.Sh NAME 35.Nm atan2 , 36.Nm atan2f , 37.Nm atan2l 38.Nd arc tangent functions of two variables 39.Sh SYNOPSIS 40.In math.h 41.Ft double 42.Fn atan2 "double y" "double x" 43.Ft float 44.Fn atan2f "float y" "float x" 45.Ft long double 46.Fn atan2l "long double y" "long double x" 47.Sh DESCRIPTION 48The 49.Fn atan2 50function computes the principal value of the arc tangent of 51.Ar y/ Ns Ar x , 52using the signs of both arguments to determine the quadrant of 53the return value. 54The 55.Fn atan2f 56function is a single precision version of 57.Fn atan2 . 58The 59.Fn atan2l 60function is an extended precision version of 61.Fn atan2 . 62.Sh RETURN VALUES 63The 64.Fn atan2 , 65.Fn atan2f 66and 67.Fn atan2l 68functions, if successful, 69return the arc tangent of 70.Ar y/ Ns Ar x 71in the range 72.Bk -words 73.Bq \&- Ns \*(Pi , \&+ Ns \*(Pi 74.Ek 75radians. 76If both 77.Ar x 78and 79.Ar y 80are zero, the global variable 81.Va errno 82is set to 83.Er EDOM . 84On the VAX: 85.Bl -column atan_(y,x)_:=____ sign(y)_(Pi_atan2(Xy_xX))___ 86.It Fn atan2 y x No := Ta 87.Fn atan y/x Ta 88if 89.Ar x 90> 0, 91.It Ta sign( Ns Ar y Ns )*(\*(Pi - 92.Fn atan "\*(Bay/x\*(Ba" ) Ta 93if 94.Ar x 95< 0, 96.It Ta 97.No 0 Ta 98if 99.Ar x 100= 101.Ar y 102= 0, or 103.It Ta 104.Pf sign( Ar y Ns )*\*(Pi/2 Ta 105if 106.Ar x 107= 0, 108.Ar y 109!= 0. 110.El 111.Sh NOTES 112The function 113.Fn atan2 114defines "if x > 0," 115.Fn atan2 0 0 116= 0 on a VAX despite that previously 117.Fn atan2 0 0 118may have generated an error message. 119The reasons for assigning a value to 120.Fn atan2 0 0 121are these: 122.Bl -enum -offset indent 123.It 124Programs that test arguments to avoid computing 125.Fn atan2 0 0 126must be indifferent to its value. 127Programs that require it to be invalid are vulnerable 128to diverse reactions to that invalidity on diverse computer systems. 129.It 130The 131.Fn atan2 132function is used mostly to convert from rectangular (x,y) 133to polar 134.if n\ 135(r,theta) 136.if t\ 137(r,\(*h) 138coordinates that must satisfy x = 139.if n\ 140r\(**cos theta 141.if t\ 142r\(**cos\(*h 143and y = 144.if n\ 145r\(**sin theta. 146.if t\ 147r\(**sin\(*h. 148These equations are satisfied when (x=0,y=0) 149is mapped to 150.if n \ 151(r=0,theta=0) 152.if t \ 153(r=0,\(*h=0) 154on a VAX. 155In general, conversions to polar coordinates 156should be computed thus: 157.Bd -unfilled -offset indent 158.if n \{\ 159r := hypot(x,y); ... := sqrt(x\(**x+y\(**y) 160theta := atan2(y,x). 161.\} 162.if t \{\ 163r := hypot(x,y); ... := \(sr(x\u\s82\s10\d+y\u\s82\s10\d) 164\(*h := atan2(y,x). 165.\} 166.Ed 167.It 168The foregoing formulas need not be altered to cope in a 169reasonable way with signed zeros and infinities 170on a machine that conforms to IEEE 754 ; 171the versions of 172.Xr hypot 3 173and 174.Fn atan2 175provided for 176such a machine are designed to handle all cases. 177That is why 178.Fn atan2 \(+-0 \-0 179= \(+-\*(Pi 180for instance. 181In general the formulas above are equivalent to these: 182.Bd -unfilled -offset indent 183.if n \ 184r := sqrt(x\(**x+y\(**y); if r = 0 then x := copysign(1,x); 185.if t \ 186r := \(sr(x\(**x+y\(**y);\0\0if r = 0 then x := copysign(1,x); 187.Ed 188.El 189.Sh SEE ALSO 190.Xr acos 3 , 191.Xr asin 3 , 192.Xr atan 3 , 193.Xr cos 3 , 194.Xr cosh 3 , 195.Xr sin 3 , 196.Xr sinh 3 , 197.Xr tan 3 , 198.Xr tanh 3 199.Sh STANDARDS 200The 201.Fn atan2 202function conforms to 203.St -ansiC . 204