diff options
author | Anthony LaTorre <devnull@localhost> | 2012-12-21 12:39:03 -0500 |
---|---|---|
committer | tlatorre <tlatorre@uchicago.edu> | 2021-05-09 08:42:39 -0700 |
commit | 5182aad6d2efdcfba9f62f2835c9f64a48ec4368 (patch) | |
tree | ff9a0ddb3aaf444a24049315aa845da57b8ebde0 | |
parent | b48968a5f5646e162bc4ba51880c327525761946 (diff) | |
download | chroma-5182aad6d2efdcfba9f62f2835c9f64a48ec4368.tar.gz chroma-5182aad6d2efdcfba9f62f2835c9f64a48ec4368.tar.bz2 chroma-5182aad6d2efdcfba9f62f2835c9f64a48ec4368.zip |
oops. fix interpolation for a uniformly sampled function
-rw-r--r-- | chroma/cuda/interpolate.h | 13 |
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 |