source: trunk/gcc/libjava/java/lang/w_atan2.c

Last change on this file was 2, checked in by bird, 22 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 2.3 KB
Line 
1
2/* @(#)w_atan2.c 5.1 93/09/24 */
3/*
4 * ====================================================
5 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
6 *
7 * Developed at SunPro, a Sun Microsystems, Inc. business.
8 * Permission to use, copy, modify, and distribute this
9 * software is freely granted, provided that this notice
10 * is preserved.
11 * ====================================================
12 *
13 */
14
15/*
16FUNCTION
17 <<atan2>>, <<atan2f>>---arc tangent of y/x
18
19INDEX
20 atan2
21INDEX
22 atan2f
23
24ANSI_SYNOPSIS
25 #include <math.h>
26 double atan2(double <[y]>,double <[x]>);
27 float atan2f(float <[y]>,float <[x]>);
28
29TRAD_SYNOPSIS
30 #include <math.h>
31 double atan2(<[y]>,<[x]>);
32 double <[y]>;
33 double <[x]>;
34
35 float atan2f(<[y]>,<[x]>);
36 float <[y]>;
37 float <[x]>;
38
39DESCRIPTION
40
41<<atan2>> computes the inverse tangent (arc tangent) of <[y]>/<[x]>.
42<<atan2>> produces the correct result even for angles near
43@ifinfo
44pi/2 or -pi/2
45@end ifinfo
46@tex
47$\pi/2$ or $-\pi/2$
48@end tex
49(that is, when <[x]> is near 0).
50
51<<atan2f>> is identical to <<atan2>>, save that it takes and returns
52<<float>>.
53
54RETURNS
55<<atan2>> and <<atan2f>> return a value in radians, in the range of
56@ifinfo
57-pi to pi.
58@end ifinfo
59@tex
60$-\pi$ to $\pi$.
61@end tex
62
63If both <[x]> and <[y]> are 0.0, <<atan2>> causes a <<DOMAIN>> error.
64
65You can modify error handling for these functions using <<matherr>>.
66
67PORTABILITY
68<<atan2>> is ANSI C. <<atan2f>> is an extension.
69
70
71*/
72
73/*
74 * wrapper atan2(y,x)
75 */
76
77#include "fdlibm.h"
78#include <errno.h>
79
80#ifndef _DOUBLE_IS_32BITS
81
82#ifdef __STDC__
83 double atan2(double y, double x) /* wrapper atan2 */
84#else
85 double atan2(y,x) /* wrapper atan2 */
86 double y,x;
87#endif
88{
89#ifdef _IEEE_LIBM
90 return __ieee754_atan2(y,x);
91#else
92 double z;
93 struct exception exc;
94 z = __ieee754_atan2(y,x);
95 if(_LIB_VERSION == _IEEE_||isnan(x)||isnan(y)) return z;
96 if(x==0.0&&y==0.0) {
97 /* atan2(+-0,+-0) */
98 exc.arg1 = y;
99 exc.arg2 = x;
100 exc.type = DOMAIN;
101 exc.name = "atan2";
102 exc.err = 0;
103 exc.retval = 0.0;
104 if(_LIB_VERSION == _POSIX_)
105 errno = EDOM;
106 else if (!matherr(&exc)) {
107 errno = EDOM;
108 }
109 if (exc.err != 0)
110 errno = exc.err;
111 return exc.retval;
112 } else
113 return z;
114#endif
115}
116
117#endif /* defined(_DOUBLE_IS_32BITS) */
Note: See TracBrowser for help on using the repository browser.