]> granicus.if.org Git - postgresql/commitdiff
Suppress -0 in the C field of lines computed by line_construct_pts().
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 25 Oct 2013 19:55:15 +0000 (15:55 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 25 Oct 2013 19:55:15 +0000 (15:55 -0400)
It's not entirely clear why some PPC machines are generating -0 here, since
the underlying computation should be exactly 0 - 0.  Perhaps there's some
wider-than-nominal-precision calculations happening?  Anyway, the best way
to avoid platform-dependent results seems to be to explicitly reset -0 to
regular zero.

src/backend/utils/adt/geo_ops.c

index 25f0bfd39438057f31adc5d1395f123585f4e651..41178a6540ea0a39df79db64d1a6109b00d29036 100644 (file)
@@ -1116,6 +1116,9 @@ line_construct_pts(LINE *line, Point *pt1, Point *pt2)
                line->A = (pt2->y - pt1->y) / (pt2->x - pt1->x);
                line->B = -1.0;
                line->C = pt1->y - line->A * pt1->x;
+               /* on some platforms, the preceding expression tends to produce -0 */
+               if (line->C == 0.0)
+                       line->C = 0.0;
 #ifdef GEODEBUG
                printf("line_construct_pts- line is neither vertical nor horizontal (diffs x=%.*g, y=%.*g\n",
                           DBL_DIG, (pt2->x - pt1->x), DBL_DIG, (pt2->y - pt1->y));