Le 27/04/2011 13:54, er...@apache.org a écrit : > Author: erans Hi Gilles,
> Date: Wed Apr 27 11:54:16 2011 > New Revision: 1097088 > > URL: http://svn.apache.org/viewvc?rev=1097088&view=rev > Log: > MATH-561 > Map a value to the interval [O, period). > > Modified: > > commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java > > commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java > > Modified: > commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java > URL: > http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java?rev=1097088&r1=1097087&r2=1097088&view=diff > ============================================================================== > --- > commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java > (original) > +++ > commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java > Wed Apr 27 11:54:16 2011 > @@ -1281,6 +1281,22 @@ public final class MathUtils { > return a - TWO_PI * FastMath.floor((a + FastMath.PI - center) / > TWO_PI); > } > > + /** > + * Reduce to the primary interval {@code [0 period)}. > + * > + * @param a Value to reduce. > + * @param period Period. > + * @param offset Value that will be mapped to {@code 0}. > + * @return the value, within the interval {@code [0 period)}, > + * that corresponds to {@code a}. > + */ > + public static double reduce(double a, > + double period, > + double offset) { > + final double p = Math.abs(period); > + return a - p * Math.floor((a - offset) / p) - offset; Shouldn't this be replaced by FastMath ? Luc > + } > + > /** > * <p>Normalizes an array to make it sum to a specified value. > * Returns the result of the transformation <pre> > > Modified: > commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java > URL: > http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java?rev=1097088&r1=1097087&r2=1097088&view=diff > ============================================================================== > --- > commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java > (original) > +++ > commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java > Wed Apr 27 11:54:16 2011 > @@ -1054,6 +1054,55 @@ public final class MathUtilsTest { > } > > @Test > + public void testReduce() { > + final double period = -12.222; > + final double offset = 13; > + > + final double delta = 1.5; > + > + double orig = offset + 122456789 * period + delta; > + double expected = delta; > + Assert.assertEquals(expected, > + MathUtils.reduce(orig, period, offset), > + 1e-7); > + Assert.assertEquals(expected, > + MathUtils.reduce(orig, -period, offset), > + 1e-7); > + > + orig = offset - 123356789 * period - delta; > + expected = Math.abs(period) - delta; > + Assert.assertEquals(expected, > + MathUtils.reduce(orig, period, offset), > + 1e-6); > + Assert.assertEquals(expected, > + MathUtils.reduce(orig, -period, offset), > + 1e-6); > + > + orig = offset - 123446789 * period + delta; > + expected = delta; > + Assert.assertEquals(expected, > + MathUtils.reduce(orig, period, offset), > + 1e-6); > + Assert.assertEquals(expected, > + MathUtils.reduce(orig, -period, offset), > + 1e-6); > + } > + > + @Test > + public void testReduceComparedWithNormalizeAngle() { > + final double tol = Math.ulp(1d); > + final double period = 2 * Math.PI; > + for (double a = -15; a <= 15; a += 0.5) { > + for (double center = -15; center <= 15; center += 1) { > + final double nA = MathUtils.normalizeAngle(a, center); > + final double offset = center - Math.PI; > + final double r = MathUtils.reduce(a, period, offset); > + Assert.assertEquals(nA, r + offset, tol); > + } > + } > + } > + > + @Test > public void testNormalizeArray() { > double[] testValues1 = new double[] {1, 1, 2}; > TestUtils.assertEquals( > > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org