diff options
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)); +} |
