/** * Returns a {@code Complex} whose value is {@code (this / divisor)}, * with {@code divisor} interpreted as a real number. * * @param divisor Value by which this {@code Complex} is to be divided. * @return {@code this / divisor}. * @see #divide(Complex) */ public Complex divide(double divisor) { if (isNaN || Double.isNaN(divisor)) { return NaN; } if (divisor == 0d) { return NaN; } if (Double.isInfinite(divisor)) { return !isInfinite() ? ZERO : NaN; } return createComplex(real / divisor, imaginary / divisor); }
return result; if (isInfinite()) { result.add(INF); return result;
if (divisor.isInfinite() && !isInfinite()) { return ZERO;
/** * Return the absolute value of this complex number. * Returns {@code NaN} if either real or imaginary part is {@code NaN} * and {@code Double.POSITIVE_INFINITY} if neither part is {@code NaN}, * but at least one part is infinite. * * @return the absolute value. */ public double abs() { if (isNaN) { return Double.NaN; } if (isInfinite()) { return Double.POSITIVE_INFINITY; } if (FastMath.abs(real) < FastMath.abs(imaginary)) { if (imaginary == 0.0) { return FastMath.abs(real); } double q = real / imaginary; return FastMath.abs(imaginary) * FastMath.sqrt(1 + q * q); } else { if (real == 0.0) { return FastMath.abs(imaginary); } double q = imaginary / real; return FastMath.abs(real) * FastMath.sqrt(1 + q * q); } }
/** * @return */ public boolean isInfinite() { return fComplex.isInfinite(); }
/** * Returns a {@code Complex} whose value is {@code (this / divisor)}, * with {@code divisor} interpreted as a real number. * * @param divisor Value by which this {@code Complex} is to be divided. * @return {@code this / divisor}. * @see #divide(Complex) */ public Complex divide(double divisor) { if (notDefined || Double.isNaN(divisor)) { return NaN; } if (divisor == 0d) { return NaN; } if (Double.isInfinite(divisor)) { return !isInfinite() ? ZERO : NaN; } return createComplex(real / divisor, imaginary / divisor); }
/** * Return the absolute value of this complex number. * Returns {@code NaN} if either real or imaginary part is {@code NaN} * and {@code Double.POSITIVE_INFINITY} if neither part is {@code NaN}, * but at least one part is infinite. * * @return the absolute value. */ public double abs() { if (notDefined) { return Double.NaN; } if (isInfinite()) { return Double.POSITIVE_INFINITY; } if (Math.abs(real) < Math.abs(imaginary)) { if (imaginary == 0.0) { return Math.abs(real); } double q = real / imaginary; return Math.abs(imaginary) * Math.sqrt(1 + q * q); } else { if (real == 0.0) { return Math.abs(imaginary); } double q = imaginary / real; return Math.abs(real) * Math.sqrt(1 + q * q); } }
/** * Returns a {@code Complex} whose value is {@code (this / divisor)}, * with {@code divisor} interpreted as a real number. * * @param divisor Value by which this {@code Complex} is to be divided. * @return {@code this / divisor}. * @see #divide(Complex) */ public Complex divide(double divisor) { if (isNaN || Double.isNaN(divisor)) { return NaN; } if (divisor == 0d) { return NaN; } if (Double.isInfinite(divisor)) { return !isInfinite() ? ZERO : NaN; } return createComplex(real / divisor, imaginary / divisor); }
private void normalize() { if (value.isInfinite()) { qualifier = "infinity"; } else if (value.isNaN()) { qualifier = "undefined"; } else if (value.getReal() == 0.0d && value.getImaginary() == 0.0) { qualifier = "zero"; } }
return result; if (isInfinite()) { result.add(INF); return result;
if (divisor.isInfinite() && !isInfinite()) { return ZERO;
return result; if (isInfinite()) { result.add(INF); return result;
private Complex transform(Complex c) { if (c.isInfinite()) return new Complex(-1, 0); // frequency transform c = c.multiply(f); Complex one = new Complex(1, 0); // bilinear low pass transform return (one.add(c)).divide(one.subtract(c)); }
if (divisor.isInfinite() && !isInfinite()) { return ZERO;
private Complex transform(Complex c) { if (c.isInfinite()) return new Complex(1, 0); // frequency transform c = c.multiply(f); // bilinear high pass transform return new Complex(-1).multiply((new Complex(1)).add(c)).divide( (new Complex(1)).subtract(c)); }
/** * Return the absolute value of this complex number. * Returns {@code NaN} if either real or imaginary part is {@code NaN} * and {@code Double.POSITIVE_INFINITY} if neither part is {@code NaN}, * but at least one part is infinite. * * @return the absolute value. */ public double abs() { if (isNaN) { return Double.NaN; } if (isInfinite()) { return Double.POSITIVE_INFINITY; } if (FastMath.abs(real) < FastMath.abs(imaginary)) { if (imaginary == 0.0) { return FastMath.abs(real); } double q = real / imaginary; return FastMath.abs(imaginary) * FastMath.sqrt(1 + q * q); } else { if (real == 0.0) { return FastMath.abs(imaginary); } double q = imaginary / real; return FastMath.abs(real) * FastMath.sqrt(1 + q * q); } }
private ComplexPair transform(Complex c) { if (c.isInfinite()) c = new Complex(-1); else c = ((new Complex(1)).add(c)).divide((new Complex(1)).subtract(c)); // bilinear Complex u = new Complex(0); u = MathSupplement.addmul(u, 4 * (b2 + a2 - 1), c); u = u.add(8 * (b2 - a2 + 1)); u = u.multiply(c); u = u.add(4 * (a2 + b2 - 1)); u = u.sqrt(); Complex v = u.multiply(-.5); v = v.add(a); v = MathSupplement.addmul(v, -a, c); u = u.multiply(.5); u = u.add(a); u = MathSupplement.addmul(u, -a, c); Complex d = new Complex(b + 1); d = MathSupplement.addmul(d, b - 1, c); return new ComplexPair(u.divide(d), v.divide(d)); }
private ComplexPair transform(Complex c) { if (c.isInfinite()) { return new ComplexPair(new Complex(-1), new Complex(1)); } c = ((new Complex(1)).add(c)).divide((new Complex(1)).subtract(c)); // bilinear Complex v = new Complex(0); v = MathSupplement.addmul(v, 4 * (b2 * (a2 - 1) + 1), c); v = v.add(8 * (b2 * (a2 - 1) - 1)); v = v.multiply(c); v = v.add(4 * (b2 * (a2 - 1) + 1)); v = v.sqrt(); Complex u = v.multiply(-1); u = MathSupplement.addmul(u, ab_2, c); u = u.add(ab_2); v = MathSupplement.addmul(v, ab_2, c); v = v.add(ab_2); Complex d = new Complex(0); d = MathSupplement.addmul(d, 2 * (b - 1), c).add(2 * (1 + b)); return new ComplexPair(u.divide(d), v.divide(d)); }