/src/PROJ/src/aasincos.cpp
Line | Count | Source |
1 | | /* arc sin, cosine, tan2 and sqrt that will NOT fail */ |
2 | | |
3 | | #include <math.h> |
4 | | |
5 | | #include "proj.h" |
6 | | #include "proj_internal.h" |
7 | | |
8 | 32 | #define ONE_TOL 1.00000000000001 |
9 | 901k | #define ATOL 1e-50 |
10 | | |
11 | 490k | double aasin(PJ_CONTEXT *ctx, double v) { |
12 | 490k | double av; |
13 | | |
14 | 490k | if ((av = fabs(v)) >= 1.) { |
15 | 21 | if (av > ONE_TOL) |
16 | 2 | proj_context_errno_set( |
17 | 2 | ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); |
18 | 21 | return (v < 0. ? -M_HALFPI : M_HALFPI); |
19 | 21 | } |
20 | 490k | return asin(v); |
21 | 490k | } |
22 | | |
23 | 7.10k | double aacos(PJ_CONTEXT *ctx, double v) { |
24 | 7.10k | double av; |
25 | | |
26 | 7.10k | if ((av = fabs(v)) >= 1.) { |
27 | 11 | if (av > ONE_TOL) |
28 | 2 | proj_context_errno_set( |
29 | 2 | ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); |
30 | 11 | return (v < 0. ? M_PI : 0.); |
31 | 11 | } |
32 | 7.09k | return acos(v); |
33 | 7.10k | } |
34 | 29.1k | double asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); } |
35 | 450k | double aatan2(double n, double d) { |
36 | 450k | return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n, d)); |
37 | 450k | } |