aboutsummaryrefslogtreecommitdiff
path: root/src/projections/poly.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/projections/poly.cpp')
-rw-r--r--src/projections/poly.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/projections/poly.cpp b/src/projections/poly.cpp
index 08a4aaad..fc7fc8bd 100644
--- a/src/projections/poly.cpp
+++ b/src/projections/poly.cpp
@@ -116,15 +116,18 @@ static PJ_LP poly_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
lp.phi = xy.y;
B = xy.x * xy.x + xy.y * xy.y;
i = N_ITER;
- do {
+ while(true) {
tp = tan(lp.phi);
lp.phi -= (dphi = (xy.y * (lp.phi * tp + 1.) - lp.phi -
.5 * ( lp.phi * lp.phi + B) * tp) /
((lp.phi - xy.y) / tp - 1.));
- } while (fabs(dphi) > CONV && --i);
- if (! i) {
- proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
- return lp;
+ if( !(fabs(dphi) > CONV) )
+ break;
+ --i;
+ if( i == 0 ) {
+ proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
+ return lp;
+ }
}
lp.lam = asin(xy.x * tan(lp.phi)) / sin(lp.phi);
}