Esempio n. 1
0
        Expr Div(Expr num, Expr den) {
            if(Equals(num, Expr.Zero))
                return Expr.Zero;
            if(Equals(den, Expr.One))
                return num;

            var numDiv = num.ExprOrDivToDiv();
            var denDiv = den.ExprOrDivToDiv();

            var numWithCoeff = Mult(MakeExprList(numDiv.Num, denDiv.Den)).ExprOrMultToKoeffMultInfo(builder);
            var denWithCoeff = Mult(MakeExprList(numDiv.Den, denDiv.Num)).ExprOrMultToKoeffMultInfo(builder);
            var gcd = Gcd(numWithCoeff.Mult, denWithCoeff.Mult);

            var finalNum = Mult(Const(numWithCoeff.Koeff / denWithCoeff.Koeff).Yield().Concat(Divide(numWithCoeff.Mult, gcd)).ToExprList());
            var finalDen = Mult(Divide(denWithCoeff.Mult, gcd));

            if(Equals(finalDen, Expr.One))
                return finalNum;

            return builder.Divide(finalNum, finalDen);
        }