]> granicus.if.org Git - postgis/commitdiff
ST_AsGeobuf fix double comparison
authorBjörn Harrtell <bjorn@wololo.org>
Sat, 23 Sep 2017 18:35:09 +0000 (18:35 +0000)
committerBjörn Harrtell <bjorn@wololo.org>
Sat, 23 Sep 2017 18:35:09 +0000 (18:35 +0000)
References #3840

git-svn-id: http://svn.osgeo.org/postgis/trunk@15802 b70326c6-7e19-0410-871a-916f4a2858ee

postgis/geobuf.c

index 3c00ff2e62b693ce5d56f7917816d42d2e8daf9c..7340ccc8047c784afd16c54daf3b3856bfd2b4cc 100644 (file)
@@ -440,7 +440,8 @@ static Data__Geometry *encode_geometry(struct geobuf_agg_context *ctx,
 
 static void analyze_val(struct geobuf_agg_context *ctx, double val)
 {
-       if (ceil(val * ctx->e) / ctx->e != val && ctx->e < MAX_PRECISION)
+       if (fabs((round(val * ctx->e) / ctx->e) - val) >= EPSILON &&
+               ctx->e < MAX_PRECISION)
                ctx->e *= 10;
 }
 
@@ -454,7 +455,7 @@ static void analyze_pa(struct geobuf_agg_context *ctx, POINTARRAY *pa)
                analyze_val(ctx, pt.y);
                if (ctx->dimensions == 3)
                        analyze_val(ctx, pt.z);
-               else if (ctx->dimensions == 4)
+               if (ctx->dimensions == 4)
                        analyze_val(ctx, pt.m);
        }
 }