@Override
    public Complex divide(final Complex denominator) {
        if (denominator == null)
            throw new NullPointerException("The denominator is not properly specified.");
        if (Complex.isNaN(this) || Complex.isNaN(denominator))
            return Complex.NaN;
        if (Complex.isOrigin(denominator))
        {
            if(Complex.isOrigin(this))
                return Complex.NaN;
            else
                return Complex.Infinity;
        }
        return this.product(denominator.inverse());
    }