From: Thies Jochimsen <thies@jochimsen.de>
Subject: Fix core-dump of unittest
Origin: upstream, http://od1n.svn.sourceforge.net/viewvc/od1n/trunk/odin/tjutils/tjvector.cpp?view=patch&r1=9622&r2=9621&pathrev=9622

--- odin/tjutils/tjvector.cpp	2011/12/14 13:45:58	9621
+++ odin/tjutils/tjvector.cpp	2011/12/15 16:24:47	9622
@@ -315,15 +315,15 @@
   double* data_re=new double[oldsize];
   double* data_im=new double[oldsize];
 
-  float oldstep=secureInv(double(oldsize));
-  float minold=0.5*oldstep;
-  float maxold=1.0-0.5*oldstep;
-  ODINLOG(odinlog,normalDebug) << "oldstep/minold/maxold=" << oldstep << "/" << minold << "/" << maxold << STD_endl;
+  double oldstep=secureInv(double(oldsize));
   for(i=0; i<oldsize; i++) {
-    x[i] = (float(i)+0.5) * oldstep;
+    x[i] = (double(i)+0.5) * oldstep;
     data_re[i]=data[i].real();
     data_im[i]=data[i].imag();
   }
+  double minold=x[0]; //using doubles to prevent round-off errors
+  double maxold=x[oldsize-1];
+  ODINLOG(odinlog,normalDebug) << "oldstep/minold/maxold=" << oldstep << "/" << minold << "/" << maxold << STD_endl;
 
   gsl_interp_accel *acc_re = gsl_interp_accel_alloc ();
   gsl_interp_accel *acc_im = gsl_interp_accel_alloc ();
@@ -339,7 +339,7 @@
   gsl_spline_init (spline_im, x, data_im, oldsize);
 
   for(i=0; i<newsize; i++) {
-    float newx=((float(i)-subpixel_shift)+0.5)/float(newsize);
+    double newx=((double(i)-subpixel_shift)+0.5)/double(newsize);
     if(newx<minold) newx=minold;
     if(newx>maxold) newx=maxold;
     float re=gsl_spline_eval (spline_re, newx, acc_re);
@@ -385,10 +385,10 @@
     }
   }
 
-
   return newdata;
 }
 
+
 float* interpolate1D(const float* olddata,unsigned int oldsize,unsigned int newsize, float subpixel_shift) {
   Log<VectorComp> odinlog("tjvector","interpolate1D(float)");
   STD_complex* oldcomplexdata=new STD_complex[oldsize];
