Forráskód Böngészése

avoid fp calculation errors as far as possible

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@44082 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 14 éve
szülő
commit
606f49d4ef
1 módosított fájl, 22 hozzáadás és 24 törlés
  1. 22 24
      lib/raster/interp.c

+ 22 - 24
lib/raster/interp.c

@@ -55,51 +55,49 @@ DCELL Rast_interp_lanczos(double u, double v, DCELL *c)
     double uweight[5], vweight[5], d, d_pi;
     double sind, sincd1, sincd2;
 
-    d = v + 2;
-    d_pi = d * M_PI;
+    d_pi = v * M_PI;
     sind = 2 * sin(d_pi);
     sincd1 = sind * sin(d_pi / 2);
-    vweight[0] = (d == 0 ? 1 : sincd1 / (d_pi * d_pi));
+    vweight[2] = (v == 0 ? 1 : sincd1 / (d_pi * d_pi));
 
-    d -= 1.;
+    d = v + 2;
     d_pi = d * M_PI;
-    sincd2 = -sind * sin(d_pi / 2);
-    vweight[1] = (d == 0 ? 1 : sincd2 / (d_pi * d_pi));
+    vweight[0] = (d == 0 ? 1 : -sincd1 / (d_pi * d_pi));
 
-    d -= 1.;
+    d = v + 1.;
     d_pi = d * M_PI;
-    vweight[2] = (d == 0 ? 1 : -sincd1 / (d_pi * d_pi));
+    sincd2 = sind * sin(d_pi / 2);
+    vweight[1] = (d == 0 ? 1 : -sincd2 / (d_pi * d_pi));
 
-    d -= 1.;
+    d = v - 1.;
     d_pi = d * M_PI;
-    vweight[3] = (d == 0 ? 1 : -sincd2 / (d_pi * d_pi));
+    vweight[3] = (d == 0 ? 1 : sincd2 / (d_pi * d_pi));
 
-    d -= 1.;
+    d = v - 2.;
     d_pi = d * M_PI;
-    vweight[4] = (d == 0 ? 1 : sincd1 / (d_pi * d_pi));
+    vweight[4] = (d == 0 ? 1 : -sincd1 / (d_pi * d_pi));
 
-    d = u + 2;
-    d_pi = d * M_PI;
+    d_pi = u * M_PI;
     sind = 2 * sin(d_pi);
     sincd1 = sind * sin(d_pi / 2);
-    uweight[0] = (d == 0 ? 1 : sincd1 / (d_pi * d_pi));
+    uweight[2] = (u == 0 ? 1 : sincd1 / (d_pi * d_pi));
 
-    d -= 1.;
+    d = u + 2;
     d_pi = d * M_PI;
-    sincd2 = -sind * sin(d_pi / 2);
-    uweight[1] = (d == 0 ? 1 : sincd2 / (d_pi * d_pi));
+    uweight[0] = (d == 0 ? 1 : -sincd1 / (d_pi * d_pi));
 
-    d -= 1.;
+    d = u + 1.;
     d_pi = d * M_PI;
-    uweight[2] = (d == 0 ? 1 : -sincd1 / (d_pi * d_pi));
+    sincd2 = sind * sin(d_pi / 2);
+    uweight[1] = (d == 0 ? 1 : -sincd2 / (d_pi * d_pi));
 
-    d -= 1.;
+    d = u - 1.;
     d_pi = d * M_PI;
-    uweight[3] = (d == 0 ? 1 : -sincd2 / (d_pi * d_pi));
+    uweight[3] = (d == 0 ? 1 : sincd2 / (d_pi * d_pi));
 
-    d -= 1.;
+    d = u - 2.;
     d_pi = d * M_PI;
-    uweight[4] = (d == 0 ? 1 : sincd1 / (d_pi * d_pi));
+    uweight[4] = (d == 0 ? 1 : -sincd1 / (d_pi * d_pi));
 
     return ((c[0] * vweight[0] + c[1] * vweight[1] + c[2] * vweight[2]
 	    + c[3] * vweight[3] + c[4] * vweight[4]) * uweight[0] +