[gegl] transform: multiply with reciprocal rather than divide in innerloop



commit 0e5c06ebf46372eb69fde416bec79627a038fe51
Author: Ãyvind KolÃs <pippin gimp org>
Date:   Sun Apr 8 20:24:32 2012 +0200

    transform: multiply with reciprocal rather than divide in innerloop

 operations/transform/transform-core.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)
---
diff --git a/operations/transform/transform-core.c b/operations/transform/transform-core.c
index 31ae3e0..6cbd562 100644
--- a/operations/transform/transform-core.c
+++ b/operations/transform/transform-core.c
@@ -785,13 +785,14 @@ affine_generic (GeglBuffer  *dest,
           for (x = roi->width; x--;)
             {
               GeglMatrix2 inverse_jacobian;
-              float u = u_float / w_float;
-              float v = v_float / w_float;
-
-              inverse_jacobian.coeff[0][0] = (inverse.coeff[0][0] - inverse.coeff[2][0] * u) / w_float;
-              inverse_jacobian.coeff[0][1] = (inverse.coeff[0][1] - inverse.coeff[2][1] * u) / w_float;
-              inverse_jacobian.coeff[1][0] = (inverse.coeff[1][0] - inverse.coeff[2][0] * v) / w_float;
-              inverse_jacobian.coeff[1][1] = (inverse.coeff[1][1] - inverse.coeff[2][1] * v) / w_float;
+              gdouble w_recip = 1.0 / w_float;
+              gdouble u = u_float * w_recip;
+              gdouble v = v_float * w_recip;
+
+              inverse_jacobian.coeff[0][0] = (inverse.coeff[0][0] - inverse.coeff[2][0] * u) * w_recip;
+              inverse_jacobian.coeff[0][1] = (inverse.coeff[0][1] - inverse.coeff[2][1] * u) * w_recip;
+              inverse_jacobian.coeff[1][0] = (inverse.coeff[1][0] - inverse.coeff[2][0] * v) * w_recip;
+              inverse_jacobian.coeff[1][1] = (inverse.coeff[1][1] - inverse.coeff[2][1] * v) * w_recip;
 
               gegl_sampler_get (sampler, u, v, &inverse_jacobian, dest_ptr);
               dest_ptr+=4;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]