You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ce...@apache.org on 2011/10/04 10:12:05 UTC
svn commit: r1178715 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math/ main/java/org/apache/commons/math/complex/
main/java/org/apache/commons/math/util/
test/java/org/apache/commons/math/complex/
test/java/org/apache/commons/math...
Author: celestin
Date: Tue Oct 4 08:12:05 2011
New Revision: 1178715
URL: http://svn.apache.org/viewvc?rev=1178715&view=rev
Log:
Added method multiply(int) to FieldElement, and updated implementing classes and tests accordingly. Solves MATH-684.
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/FieldElement.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/complex/Complex.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/BigReal.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/complex/ComplexTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/BigRealTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/FieldElement.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/FieldElement.java?rev=1178715&r1=1178714&r2=1178715&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/FieldElement.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/FieldElement.java Tue Oct 4 08:12:05 2011
@@ -38,6 +38,16 @@ public interface FieldElement<T> {
*/
T subtract(T a);
+ /** Compute n × this. Multiplication by an integer number is defined
+ * as the following sum
+ * <center>
+ * n × this = ∑<sub>i=1</sub><sup>n</sup> this.
+ * </center>
+ * @param n Number of times {@code this} must be added to itself.
+ * @return A new element representing n × this.
+ */
+ T multiply(int n);
+
/** Compute this × a.
* @param a element to multiply
* @return a new element representing this × a
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/complex/Complex.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/complex/Complex.java?rev=1178715&r1=1178714&r2=1178715&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/complex/Complex.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/complex/Complex.java Tue Oct 4 08:12:05 2011
@@ -426,6 +426,25 @@ public class Complex implements FieldEle
/**
* Returns a {@code Complex} whose value is {@code this * factor}, with {@code factor}
+ * interpreted as a integer number.
+ *
+ * @param factor value to be multiplied by this {@code Complex}.
+ * @return {@code this * factor}.
+ * @see #multiply(Complex)
+ */
+ public Complex multiply(final int factor) {
+ if (isNaN) {
+ return NaN;
+ }
+ if (Double.isInfinite(real) ||
+ Double.isInfinite(imaginary)) {
+ return INF;
+ }
+ return createComplex(real * factor, imaginary * factor);
+ }
+
+ /**
+ * Returns a {@code Complex} whose value is {@code this * factor}, with {@code factor}
* interpreted as a real number.
*
* @param factor value to be multiplied by this {@code Complex}.
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/BigReal.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/BigReal.java?rev=1178715&r1=1178714&r2=1178715&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/BigReal.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/BigReal.java Tue Oct 4 08:12:05 2011
@@ -247,6 +247,11 @@ public class BigReal implements FieldEle
}
/** {@inheritDoc} */
+ public BigReal multiply(final int n) {
+ return new BigReal(d.multiply(new BigDecimal(n)));
+ }
+
+ /** {@inheritDoc} */
public int compareTo(BigReal a) {
return d.compareTo(a.d);
}
@@ -288,5 +293,4 @@ public class BigReal implements FieldEle
public Field<BigReal> getField() {
return BigRealField.getInstance();
}
-
}
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/complex/ComplexTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/complex/ComplexTest.java?rev=1178715&r1=1178714&r2=1178715&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/complex/ComplexTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/complex/ComplexTest.java Tue Oct 4 08:12:05 2011
@@ -129,7 +129,7 @@ public class ComplexTest {
Assert.assertTrue(Double.isNaN(x.add(z).getReal()));
}
-
+
@Test
public void testScalarAdd() {
Complex x = new Complex(3.0, 4.0);
@@ -150,7 +150,7 @@ public class ComplexTest {
public void testScalarAddInf() {
Complex x = new Complex(1, 1);
double yDouble = Double.POSITIVE_INFINITY;
-
+
Complex yComplex = new Complex(yDouble);
Assert.assertEquals(x.add(yComplex), x.add(yDouble));
@@ -288,11 +288,11 @@ public class ComplexTest {
yDouble = Double.NEGATIVE_INFINITY;
yComplex = new Complex(yDouble);
TestUtils.assertEquals(x.divide(yComplex), x.divide(yDouble), 0);
-
+
x = new Complex(1, Double.NEGATIVE_INFINITY);
TestUtils.assertEquals(x.divide(yComplex), x.divide(yDouble), 0);
}
-
+
@Test
public void testScalarDivideZero() {
Complex x = new Complex(1,1);
@@ -313,10 +313,12 @@ public class ComplexTest {
Complex x = new Complex(3.0, 4.0);
Complex z = x.multiply(Complex.NaN);
Assert.assertSame(Complex.NaN, z);
+ z = Complex.NaN.multiply(5);
+ Assert.assertSame(Complex.NaN, z);
}
@Test
- public void testMultiplyInInf() {
+ public void testMultiplyInfInf() {
// Assert.assertTrue(infInf.multiply(infInf).isNaN()); // MATH-620
Assert.assertTrue(infInf.multiply(infInf).isInfinite());
}
@@ -340,7 +342,7 @@ public class ComplexTest {
w = negInfNegInf.multiply(oneNaN);
Assert.assertTrue(Double.isNaN(w.getReal()));
Assert.assertTrue(Double.isNaN(w.getImaginary()));
-
+
z = new Complex(1, neginf);
Assert.assertSame(Complex.INF, z.multiply(z));
}
@@ -351,6 +353,9 @@ public class ComplexTest {
double yDouble = 2.0;
Complex yComplex = new Complex(yDouble);
Assert.assertEquals(x.multiply(yComplex), x.multiply(yDouble));
+ int zInt = -5;
+ Complex zComplex = new Complex(zInt);
+ Assert.assertEquals(x.multiply(zComplex), x.multiply(zInt));
}
@Test
@@ -367,7 +372,7 @@ public class ComplexTest {
double yDouble = Double.POSITIVE_INFINITY;
Complex yComplex = new Complex(yDouble);
Assert.assertEquals(x.multiply(yComplex), x.multiply(yDouble));
-
+
yDouble = Double.NEGATIVE_INFINITY;
yComplex = new Complex(yDouble);
Assert.assertEquals(x.multiply(yComplex), x.multiply(yDouble));
@@ -417,7 +422,7 @@ public class ComplexTest {
x = new Complex(neginf, 0);
Assert.assertTrue(Double.isNaN(x.subtract(z).getReal()));
}
-
+
@Test
public void testScalarSubtract() {
Complex x = new Complex(3.0, 4.0);
@@ -445,7 +450,7 @@ public class ComplexTest {
Assert.assertEquals(x.subtract(yComplex), x.subtract(yDouble));
}
-
+
@Test
public void testEqualsNull() {
Complex x = new Complex(3.0, 4.0);
@@ -507,7 +512,7 @@ public class ComplexTest {
Assert.assertEquals(realNaN.hashCode(), imaginaryNaN.hashCode());
Assert.assertEquals(imaginaryNaN.hashCode(), Complex.NaN.hashCode());
}
-
+
@Test
public void testAcos() {
Complex z = new Complex(3, 4);
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/BigRealTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/BigRealTest.java?rev=1178715&r1=1178714&r2=1178715&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/BigRealTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/BigRealTest.java Tue Oct 4 08:12:05 2011
@@ -87,6 +87,8 @@ public class BigRealTest {
BigReal a = new BigReal("1024.0");
BigReal b = new BigReal("0.0009765625");
Assert.assertEquals(1.0, a.multiply(b).doubleValue(), 1.0e-15);
+ int n = 1024;
+ Assert.assertEquals(1.0, b.multiply(n).doubleValue(), 1.0e-15);
}
@Test