diff options
| author | Frank Warmerdam <warmerdam@pobox.com> | 1999-03-18 16:34:52 +0000 |
|---|---|---|
| committer | Frank Warmerdam <warmerdam@pobox.com> | 1999-03-18 16:34:52 +0000 |
| commit | 565a4bd035b9d4a83955808efef20f1d8dfa24cf (patch) | |
| tree | 75785fc897708023f1ccdaf40079afcbaaf0fd3a /src/aasincos.c | |
| download | PROJ-565a4bd035b9d4a83955808efef20f1d8dfa24cf.tar.gz PROJ-565a4bd035b9d4a83955808efef20f1d8dfa24cf.zip | |
New
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@776 4e78687f-474d-0410-85f9-8d5e500ac6b2
Diffstat (limited to 'src/aasincos.c')
| -rw-r--r-- | src/aasincos.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/aasincos.c b/src/aasincos.c new file mode 100644 index 00000000..27aab829 --- /dev/null +++ b/src/aasincos.c @@ -0,0 +1,36 @@ +/* arc sin, cosine, tan2 and sqrt that will NOT fail */ +#ifndef lint +static const char SCCSID[]="@(#)aasincos.c 4.6 93/12/12 GIE REL"; +#endif +#include <projects.h> +#define ONE_TOL 1.00000000000001 +#define TOL 0.000000001 +#define ATOL 1e-50 + double +aasin(double v) { + double av; + + if ((av = fabs(v)) >= 1.) { + if (av > ONE_TOL) + pj_errno = -19; + return (v < 0. ? -HALFPI : HALFPI); + } + return asin(v); +} + double +aacos(double v) { + double av; + + if ((av = fabs(v)) >= 1.) { + if (av > ONE_TOL) + pj_errno = -19; + return (v < 0. ? PI : 0.); + } + return acos(v); +} + double +asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); } + double +aatan2(double n, double d) { + return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n,d)); +} |
