1.\" $OpenBSD: atan2.3,v 1.12 2008/12/12 00:10:26 martynas 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: December 12 2008 $ 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.Fd #include <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 85.Tn VAX : 86.Bl -column atan_(y,x)_:=____ sign(y)_(Pi_atan2(Xy_xX))___ 87.It Fn atan2 y x No := Ta 88.Fn atan y/x Ta 89if 90.Ar x 91> 0, 92.It Ta sign( Ns Ar y Ns )*(\*(Pi - 93.Fn atan "\\*(Bay/x\\*(Ba" ) Ta 94if 95.Ar x 96< 0, 97.It Ta 98.No 0 Ta 99if 100.Ar x 101= 102.Ar y 103= 0, or 104.It Ta 105.Pf sign( Ar y Ns )*\\*(Pi/2 Ta 106if 107.Ar x 108= 0, 109.Ar y 110!= 0. 111.El 112.Sh NOTES 113The function 114.Fn atan2 115defines "if x > 0," 116.Fn atan2 0 0 117= 0 on a 118.Tn VAX 119despite that previously 120.Fn atan2 0 0 121may have generated an error message. 122The reasons for assigning a value to 123.Fn atan2 0 0 124are these: 125.Bl -enum -offset indent 126.It 127Programs that test arguments to avoid computing 128.Fn atan2 0 0 129must be indifferent to its value. 130Programs that require it to be invalid are vulnerable 131to diverse reactions to that invalidity on diverse computer systems. 132.It 133The 134.Fn atan2 135function is used mostly to convert from rectangular (x,y) 136to polar 137.if n\ 138(r,theta) 139.if t\ 140(r,\(*h) 141coordinates that must satisfy x = 142.if n\ 143r\(**cos theta 144.if t\ 145r\(**cos\(*h 146and y = 147.if n\ 148r\(**sin theta. 149.if t\ 150r\(**sin\(*h. 151These equations are satisfied when (x=0,y=0) 152is mapped to 153.if n \ 154(r=0,theta=0) 155.if t \ 156(r=0,\(*h=0) 157on a VAX. In general, conversions to polar coordinates 158should be computed thus: 159.Bd -unfilled -offset indent 160.if n \{\ 161r := hypot(x,y); ... := sqrt(x\(**x+y\(**y) 162theta := atan2(y,x). 163.\} 164.if t \{\ 165r := hypot(x,y); ... := \(sr(x\u\s82\s10\d+y\u\s82\s10\d) 166\(*h := atan2(y,x). 167.\} 168.Ed 169.It 170The foregoing formulas need not be altered to cope in a 171reasonable way with signed zeros and infinities 172on a machine that conforms to 173.Tn IEEE 754 ; 174the versions of 175.Xr hypot 3 176and 177.Fn atan2 178provided for 179such a machine are designed to handle all cases. 180That is why 181.Fn atan2 \(+-0 \-0 182= \(+-\*(Pi 183for instance. 184In general the formulas above are equivalent to these: 185.Bd -unfilled -offset indent 186.if n \ 187r := sqrt(x\(**x+y\(**y); if r = 0 then x := copysign(1,x); 188.if t \ 189r := \(sr(x\(**x+y\(**y);\0\0if r = 0 then x := copysign(1,x); 190.Ed 191.El 192.Sh SEE ALSO 193.Xr acos 3 , 194.Xr asin 3 , 195.Xr atan 3 , 196.Xr cos 3 , 197.Xr cosh 3 , 198.Xr math 3 , 199.Xr sin 3 , 200.Xr sinh 3 , 201.Xr tan 3 , 202.Xr tanh 3 203.Sh STANDARDS 204The 205.Fn atan2 206function conforms to 207.St -ansiC . 208