diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/adjlon.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/adjlon.c b/src/adjlon.c index 09b3b14b..784a90aa 100644 --- a/src/adjlon.c +++ b/src/adjlon.c @@ -1,15 +1,20 @@ /* reduce argument to range +/- PI */ #include <math.h> -#include <projects.h> - -#define SPI 3.14159265359 -#define TWOPI 6.2831853071795864769 -#define ONEPI 3.14159265358979323846 +#include "projects.h" double adjlon (double lon) { - if (fabs(lon) <= SPI) return( lon ); - lon += ONEPI; /* adjust to 0..2pi rad */ - lon -= TWOPI * floor(lon / TWOPI); /* remove integral # of 'revolutions'*/ - lon -= ONEPI; /* adjust back to -pi..pi rad */ - return( lon ); + /* Let lon slightly overshoot, to avoid spurious sign switching at the date line */ + if (fabs (lon) < M_PI + 1e-12) + return lon; + + /* adjust to 0..2pi range */ + lon += M_PI; + + /* remove integral # of 'revolutions'*/ + lon -= M_TWOPI * floor(lon / M_TWOPI); + + /* adjust back to -pi..pi range */ + lon -= M_PI; + + return lon; } |
