Jelajahi Sumber

v.in.ogr: use frexp, ldexp instead of log2, pow

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@56676 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 12 tahun lalu
induk
melakukan
ca1f18fcb5
1 mengubah file dengan 8 tambahan dan 5 penghapusan
  1. 8 5
      vector/v.in.ogr/main.c

+ 8 - 5
vector/v.in.ogr/main.c

@@ -1345,7 +1345,7 @@ int main(int argc, char *argv[])
     if (0 && flag.no_clean->answer)
 	Vect_topo_check(&Map, NULL);
 
-    if (n_polygons) {
+    if (n_polygons && nlayers == 1) {
 	/* test for topological errors */
 	/* this test is not perfect:
 	 * small gaps (areas without centroid) are not detected
@@ -1353,6 +1353,7 @@ int main(int argc, char *argv[])
 	ncentr = Vect_get_num_primitives(&Map, GV_CENTROID);
 	if (ncentr != n_polygons || n_overlaps) {
 	    double min_snap, max_snap;
+	    int exp;
 
 	    Vect_get_map_box(&Map, &box);
 	    
@@ -1369,8 +1370,9 @@ int main(int argc, char *argv[])
 		xmax = ymax;
 
 	    /* double precision ULP */
-	    min_snap = log(xmax)/log(2) - 52;
-	    min_snap = pow(2, min_snap);
+	    min_snap = frexp(xmax, &exp);
+	    exp -= 52;
+	    min_snap = ldexp(min_snap, exp);
 	    /* human readable */
 	    min_snap = log10(min_snap);
 	    if (min_snap < 0)
@@ -1380,8 +1382,9 @@ int main(int argc, char *argv[])
 	    min_snap = pow(10, min_snap);
 
 	    /* single precision ULP */
-	    max_snap = log(xmax)/log(2) - 23;
-	    max_snap = pow(2, max_snap);
+	    max_snap = frexp(xmax, &exp);
+	    exp -= 23;
+	    max_snap = ldexp(max_snap, exp);
 	    /* human readable */
 	    max_snap = log10(max_snap);
 	    if (max_snap < 0)