Re: pgsql: Tweak "line" test to avoid negative zeros on some platforms

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: pgsql-committers(at)postgresql(dot)org
Subject: Re: pgsql: Tweak "line" test to avoid negative zeros on some platforms
Date: 2013-10-25 14:55:31
Message-ID: 3348.1382712931@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Peter Eisentraut <peter_e(at)gmx(dot)net> writes:
> Tweak "line" test to avoid negative zeros on some platforms

I had been playing around with that last night on a PPC-era Mac,
hoping to get rid of the problem by twiddling the expressions in
line_construct_pts(). The only thing I could find to fix it
was the brute-force approach:

diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index 25f0bfd..41178a6 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -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));

While this is surely pretty ugly, I think it is less ugly and more robust
than what you've done here. Comments?

regards, tom lane

In response to

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2013-10-25 19:19:46 Re: pgsql: Tweak "line" test to avoid negative zeros on some platforms
Previous Message Peter Eisentraut 2013-10-25 11:09:56 pgsql: Tweak "line" test to avoid negative zeros on some platforms