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); }
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); }
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)))); }
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))); }
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))); }
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])))); } }