Пример #1
0
    internal virtual Exakt cfs(double tol1)
    {
        ArrayList a = new ArrayList();

        Exakt      error, y, ra, tol;
        BigInteger aa;

        tol = (Exakt)mult(new Exakt(tol1));
        aa  = real[0].divide(real[1]);
        a.Add(aa);
        y     = new Exakt(cfs(a));
        error = (Exakt)((Exakt)(sub(y))).abs();
        ra    = this;

        while (tol.smaller(error))
        {
            ra = (Exakt)Zahl.ONE.div(ra.sub(new Exakt(aa)));
            aa = ra.real[0].divide(ra.real[1]);
            a.Add(aa);
            y     = new Exakt(cfs(a));
            error = (Exakt)((Exakt)sub(y)).abs();
        }

        return(y);
    }
Пример #2
0
    public override Algebraic[] div(Algebraic q1, Algebraic[] result)
    {
        if (result == null)
        {
            result = new Algebraic[2];
        }

        if (!(q1 is Zahl))
        {
            result[0] = Zahl.ZERO;
            result[1] = this;

            return(result);
        }

        Exakt q = ((Zahl)q1).exakt();

        if (!komplexq() && q.komplexq())
        {
            result[0] = Zahl.ZERO;
            result[1] = this;
            return(result);
        }

        if (komplexq() && !q.komplexq())
        {
            result[0] = div(q);
            result[1] = Zahl.ZERO;

            return(result);
        }

        if (komplexq() && q.komplexq())
        {
            result[0] = imagpart().div(q.imagpart());
            result[1] = sub(result[0].mult(q));

            return(result);
        }

        if (integerq() && q.integerq())
        {
            BigInteger[] d = real[0].divideAndRemainder(q.real[0]);

            result[0] = new Exakt(d[0]);
            result[1] = new Exakt(d[1]);

            return(result);
        }

        result[0] = div(q);
        result[1] = Zahl.ZERO;

        return(result);
    }
Пример #3
0
    public override Algebraic mult(Algebraic x)
    {
        if (!(x is Zahl))
        {
            return(x.mult(this));
        }

        Exakt X = ((Zahl)x).exakt();

        return(new Exakt(sub(mult(real, X.real), mult(imag, X.imag)), add(mult(imag, X.real), mult(real, X.imag))));
    }
Пример #4
0
    public override Algebraic add(Algebraic x)
    {
        if (!(x is Zahl))
        {
            return(x.add(this));
        }

        Exakt X = ((Zahl)x).exakt();

        return(new Exakt(add(real, X.real), add(imag, X.imag)));
    }
Пример #5
0
    public override Algebraic div(Algebraic x)
    {
        if (!(x is Zahl))
        {
            return(base.div(x));
        }

        Exakt X = ((Zahl)x).exakt();

        BigInteger[] N = add(mult(X.real, X.real), mult(X.imag, X.imag));

        if (N == null || N[0].Equals(BigInteger.ZERO))

        {
            throw new JasymcaException("Division by Zero.");
        }

        return(new Exakt(div(add(mult(real, X.real), mult(imag, X.imag)), N), div(sub(mult(imag, X.real), mult(real, X.imag)), N)));
    }
Пример #6
0
    public virtual Exakt gcd(Exakt x)
    {
        if (Equals(Zahl.ZERO))
        {
            return(x);
        }
        else if (x.Equals(Zahl.ZERO))
        {
            return(this);
        }
        if (komplexq() && x.komplexq())
        {
            Exakt r = ((Exakt)realpart()).gcd((Exakt)x.realpart());
            Exakt i = ((Exakt)imagpart()).gcd((Exakt)x.imagpart());

            if (r.Equals(Zahl.ZERO))
            {
                return((Exakt)i.mult(Zahl.IONE));
            }

            if (realpart().div(r).Equals(imagpart().div(i)))
            {
                return((Exakt)r.add(i.mult(Zahl.IONE)));
            }
            else
            {
                return(Zahl.ONE.exakt());
            }
        }
        else if (komplexq() || x.komplexq())
        {
            return(Zahl.ONE.exakt());
        }
        else
        {
            return((Exakt)(new Exakt(real[0].multiply(x.real[1]).gcd(real[1].multiply(x.real[0])))).div(new Exakt(real[1].multiply(x.real[1]))));
        }
    }