/src/PROJ/src/aasincos.cpp
Line | Count | Source (jump to first uncovered line) |
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 | 946 | #define ONE_TOL 1.00000000000001 |
9 | 152 | #define ATOL 1e-50 |
10 | | |
11 | 1.66k | double aasin(PJ_CONTEXT *ctx, double v) { |
12 | 1.66k | double av; |
13 | | |
14 | 1.66k | if ((av = fabs(v)) >= 1.) { |
15 | 44 | if (av > ONE_TOL) |
16 | 4 | proj_context_errno_set( |
17 | 4 | ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); |
18 | 44 | return (v < 0. ? -M_HALFPI : M_HALFPI); |
19 | 44 | } |
20 | 1.61k | return asin(v); |
21 | 1.66k | } |
22 | | |
23 | 2.02k | double aacos(PJ_CONTEXT *ctx, double v) { |
24 | 2.02k | double av; |
25 | | |
26 | 2.02k | if ((av = fabs(v)) >= 1.) { |
27 | 902 | if (av > ONE_TOL) |
28 | 8 | proj_context_errno_set( |
29 | 8 | ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); |
30 | 902 | return (v < 0. ? M_PI : 0.); |
31 | 902 | } |
32 | 1.11k | return acos(v); |
33 | 2.02k | } |
34 | 0 | double asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); } |
35 | 76 | double aatan2(double n, double d) { |
36 | 76 | return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n, d)); |
37 | 76 | } |