/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 | 123 | #define ONE_TOL 1.00000000000001 |
9 | 764 | #define ATOL 1e-50 |
10 | | |
11 | 2.16k | double aasin(PJ_CONTEXT *ctx, double v) { |
12 | 2.16k | double av; |
13 | | |
14 | 2.16k | if ((av = fabs(v)) >= 1.) { |
15 | 16 | if (av > ONE_TOL) |
16 | 10 | proj_context_errno_set( |
17 | 10 | ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); |
18 | 16 | return (v < 0. ? -M_HALFPI : M_HALFPI); |
19 | 16 | } |
20 | 2.15k | return asin(v); |
21 | 2.16k | } |
22 | | |
23 | 427 | double aacos(PJ_CONTEXT *ctx, double v) { |
24 | 427 | double av; |
25 | | |
26 | 427 | if ((av = fabs(v)) >= 1.) { |
27 | 107 | if (av > ONE_TOL) |
28 | 0 | proj_context_errno_set( |
29 | 0 | ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); |
30 | 107 | return (v < 0. ? M_PI : 0.); |
31 | 107 | } |
32 | 320 | return acos(v); |
33 | 427 | } |
34 | 0 | double asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); } |
35 | 382 | double aatan2(double n, double d) { |
36 | 382 | return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n, d)); |
37 | 382 | } |