summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chroma/cuda/interpolate.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/chroma/cuda/interpolate.h b/chroma/cuda/interpolate.h
index a866272..e7335ba 100644
--- a/chroma/cuda/interpolate.h
+++ b/chroma/cuda/interpolate.h
@@ -32,19 +32,20 @@ interp(float x, int n, float *xp, float *fp)
__device__ float
interp_uniform(float x, int n, float x0, float dx, float *fp)
{
- if (x <= xp[0])
- return xp[0];
+ if (x <= x0)
+ return x0;
- if (x >= xp[n-1])
- return xp[n-1];
+ float xmax = x0 + dx*(n-1);
+
+ if (x >= xmax)
+ return xmax;
int lower = (x - x0)/dx;
int upper = lower + 1;
float df = fp[upper] - fp[lower];
- float dx = xp[upper] - xp[lower];
- return fp[lower] + df*(x-xp[lower])/dx;
+ return fp[lower] + df*(x-(x0+dx*lower))/dx;
}
#endif