Made scalar division consistent with complex division wrt infinite arguments, improved tests.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1150433 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Phil Steitz 2011-07-24 16:45:06 +00:00
parent 093aa6786f
commit 431ff783f0
2 changed files with 14 additions and 6 deletions

View File

@ -278,13 +278,12 @@ public class Complex implements FieldElement<Complex>, Serializable {
if (isNaN || Double.isNaN(divisor)) { if (isNaN || Double.isNaN(divisor)) {
return NaN; return NaN;
} }
if (divisor == 0.0) { if (divisor == 0d) {
return NaN; return NaN;
} }
if (Double.isInfinite(divisor) && !isInfinite()) { if (Double.isInfinite(divisor)) {
return ZERO; return !isInfinite() ? ZERO : NaN;
} }
return createComplex(real / divisor, return createComplex(real / divisor,
imaginary / divisor); imaginary / divisor);
} }

View File

@ -274,11 +274,20 @@ public class ComplexTest {
Complex x = new Complex(1,1); Complex x = new Complex(1,1);
double yDouble = Double.POSITIVE_INFINITY; double yDouble = Double.POSITIVE_INFINITY;
Complex yComplex = new Complex(yDouble); Complex yComplex = new Complex(yDouble);
Assert.assertEquals(x.divide(yComplex), x.divide(yDouble)); TestUtils.assertEquals(x.divide(yComplex), x.divide(yDouble), 0);
yDouble = Double.NEGATIVE_INFINITY; yDouble = Double.NEGATIVE_INFINITY;
yComplex = new Complex(yDouble); yComplex = new Complex(yDouble);
Assert.assertEquals(x.divide(yComplex), x.divide(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);
TestUtils.assertEquals(x.divide(Complex.ZERO), x.divide(0), 0);
} }
@Test @Test