[gegl] transform: multiply with reciprocal rather than divide in innerloop
- From: Ãyvind KolÃs <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] transform: multiply with reciprocal rather than divide in innerloop
- Date: Sun, 8 Apr 2012 18:25:34 +0000 (UTC)
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]