OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [newlib/] [libm/] [math/] [w_atan2.c] - Blame information for rev 56

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
 
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
/*
16
FUNCTION
17
        <<atan2>>, <<atan2f>>---arc tangent of y/x
18
 
19
INDEX
20
   atan2
21
INDEX
22
   atan2f
23
 
24
ANSI_SYNOPSIS
25
        #include <math.h>
26
        double atan2(double <[y]>,double <[x]>);
27
        float atan2f(float <[y]>,float <[x]>);
28
 
29
TRAD_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
 
39
DESCRIPTION
40
 
41
<<atan2>> computes the inverse tangent (arc tangent) of <[y]>/<[x]>.
42
<<atan2>> produces the correct result even for angles near
43
@ifinfo
44
pi/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
 
54
RETURNS
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
 
63
If both <[x]> and <[y]> are 0.0, <<atan2>> causes a <<DOMAIN>> error.
64
 
65
You can modify error handling for these functions using <<matherr>>.
66
 
67
PORTABILITY
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 56 joel
            exc.err = 0;
103 39 lampret
            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) */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.