From: Paul Ramsey Date: Tue, 13 Oct 2009 19:39:19 +0000 (+0000) Subject: HAck fix for NaN areas. X-Git-Tag: 1.5.0b1~374 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=69f3fb98d7b845c0105ec01e015c9bc0c7cfa0e4;p=postgis HAck fix for NaN areas. git-svn-id: http://svn.osgeo.org/postgis/trunk@4646 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/liblwgeom/lwgeodetic.c b/liblwgeom/lwgeodetic.c index 0cb1be269..48071199e 100644 --- a/liblwgeom/lwgeodetic.c +++ b/liblwgeom/lwgeodetic.c @@ -628,6 +628,13 @@ static double sphere_excess(GEOGRAPHIC_POINT a, GEOGRAPHIC_POINT b, GEOGRAPHIC_P double sign = signum(hcb-hca); double ss = (a_dist + b_dist + c_dist) / 2.0; double E = tan(ss/2.0)*tan((ss-a_dist)/2.0)*tan((ss-b_dist)/2.0)*tan((ss-c_dist)/2.0); + /* This is a worrying hack, the number had to be tuned a lot to find + the dividing line between things so small they caused a NaN and + things large enough to effect the final output areas. Probably we + will have platform difficulties with this. + */ + if( fabs(E) < 1.0e-30 ) + E = 0.0; return 4.0 * atan(sqrt(E)) * sign; }