private static void assertEqual(float[] e, float[] a, float tol) { int n = e.length; for (int i=0; i<n; ++i) { float error = abs(e[i]-a[i]); if (error>tol) trace("expected="+e[i]+" actual="+a[i]); assert error<tol; } } private static void assertEqual(float[][] e, float[][] a, float tol) {
private static void assertEqual(float[][][] e, float[][][] a) { float tol = 0.001f*max(abs(e)); assertEqual(e,a,tol); } private static void assertEqual(float[] e, float[] a, float tol) {
private void makeClipsValid() { if (_clipMin>=_clipMax) { double clipAvg = 0.5*(_clipMin+_clipMax); double tiny = max(1.0,Math.ulp(1.0f)*abs(clipAvg)); _clipMin -= tiny; _clipMax += tiny; } } }
private static void assertEqual(float[][] e, float[][] a) { float tol = 0.001f*max(abs(e)); assertEqual(e,a,tol); } private static void assertEqual(float[][][] e, float[][][] a) {
private static void assertEqual(float[] e, float[] a) { float tol = 0.001f*max(abs(e)); assertEqual(e,a,tol); } private static void assertEqual(float[][] e, float[][] a) {
private Cdouble roundToReal(Cdouble c) { Cdouble cr = new Cdouble(c.r,0.0); Point pr = complexToPoint(cr); Point p = complexToPoint(c); return (abs(p.y-pr.y)<6)?cr:c; }
public RectangleFilter(double sigma, int lag) { int n = (int)round(1+2*sigma); int m = max(0,(n-1-abs(lag))/2); int l = (lag%2==0)?-m:-m-1; _rrf = new RecursiveRectangleFilter(l,m); } public void apply(float[] x, float[] y) {
private static float emax(float[] a, float[] b) { int n = a.length; float emax = 0.0f; for (int i=0; i<n; ++i) emax = max(emax,abs(b[i]-a[i])); return emax; } private static float emax(float[][] a, float[][] b) {
private static void assertEqual(float[][][] e, float[][][] a) { float tol = 0.001f*max(abs(e)); assertEqual(e,a,tol); }
private static void assertEqual(float[][] e, float[][] a) { float tol = 0.001f*max(abs(e)); assertEqual(e,a,tol); }
private static void assertEqual(float[] e, float[] a) { float tol = 0.001f*max(abs(e)); assertEqual(e,a,tol); }