negative-zero-fixes.patch
text/x-patch
Filename: negative-zero-fixes.patch
Type: text/x-patch
Part: 0
Message:
Re: [PATCH] Improve geometric types
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/utils/adt/geo_ops.c | 22 | 0 |
diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index e0a9a0fa4f..97b3349ff8 100644
--- a/src/backend/utils/adt/geo_ops.c
+++ b/src/backend/utils/adt/geo_ops.c
@@ -1251,6 +1251,14 @@ line_interpt_line(Point *result, LINE *l1, LINE *l2)
float8_mi(float8_mul(l1->A, l2->B),
float8_mul(l2->A, l1->B)));
y = float8_div(-float8_pl(float8_mul(l1->A, x), l1->C), l1->B);
+
+ /* on some platforms, the preceding expression tends to produce -0 */
+ if (x == 0.0)
+ x = 0.0;
+
+ /* on some platforms, the preceding expression tends to produce -0 */
+ if (y == 0.0)
+ y = 0.0;
}
else if (!FPzero(l2->B))
{
@@ -1262,6 +1270,14 @@ line_interpt_line(Point *result, LINE *l1, LINE *l2)
float8_mi(float8_mul(l2->A, l1->B),
float8_mul(l1->A, l2->B)));
y = float8_div(-float8_pl(float8_mul(l2->A, x), l2->C), l2->B);
+
+ /* on some platforms, the preceding expression tends to produce -0 */
+ if (x == 0.0)
+ x = 0.0;
+
+ /* on some platforms, the preceding expression tends to produce -0 */
+ if (y == 0.0)
+ y = 0.0;
}
else
return false;
@@ -1798,6 +1814,12 @@ point_send(PG_FUNCTION_ARGS)
static inline void
point_construct(Point *result, float8 x, float8 y)
{
+ if (x == 0.0)
+ x = 0.0;
+
+ if (y == 0.0)
+ y = 0.0;
+
result->x = x;
result->y = y;
}