diff options
| -rw-r--r-- | src/pj_tsfn.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/pj_tsfn.c b/src/pj_tsfn.c index 448aae99..eff20cab 100644 --- a/src/pj_tsfn.c +++ b/src/pj_tsfn.c @@ -2,9 +2,15 @@ #include <math.h> #include <projects.h> - double -pj_tsfn(double phi, double sinphi, double e) { - sinphi *= e; - return (tan (.5 * (M_HALFPI - phi)) / - pow((1. - sinphi) / (1. + sinphi), .5 * e)); +double pj_tsfn(double phi, double sinphi, double e) { + double denominator; + sinphi *= e; + + /* avoid zero division, fail gracefully */ + denominator = 1.0 + sinphi; + if (denominator == 0.0) + return HUGE_VAL; + + return (tan (.5 * (M_HALFPI - phi)) / + pow((1. - sinphi) / (denominator), .5 * e)); } |
