UNPKG

algebrite

Version:

Computer Algebra System in Coffeescript

110 lines (79 loc) 1.35 kB
# Divide polynomials Eval_quotient = -> push(cadr(p1)); # 1st arg, p(x) Eval() push(caddr(p1)); # 2nd arg, q(x) Eval() push(cadddr(p1)); # 3rd arg, x Eval() p1 = pop(); # default x if (p1 == symbol(NIL)) p1 = symbol(SYMBOL_X) push(p1) divpoly() #----------------------------------------------------------------------------- # # Divide polynomials # # Input: tos-3 Dividend # # tos-2 Divisor # # tos-1 x # # Output: tos-1 Quotient # #----------------------------------------------------------------------------- #define DIVIDEND p1 #define DIVISOR p2 #define X p3 #define Q p4 #define QUOTIENT p5 divpoly = -> h = 0 i = 0 m = 0 n = 0 x = 0 #U **dividend, **divisor save() p3 = pop() p2 = pop() p1 = pop() h = tos dividend = tos push(p1) push(p3) m = coeff() - 1; # m is dividend's power divisor = tos push(p2) push(p3) n = coeff() - 1; # n is divisor's power x = m - n push_integer(0) p5 = pop() while (x >= 0) push(stack[dividend+m]) push(stack[divisor+n]) divide() p4 = pop() for i in [0..n] push(stack[dividend+x + i]) push(stack[divisor+i]) push(p4) multiply() subtract() stack[dividend+x + i] = pop() push(p5) push(p4) push(p3) push_integer(x) power() multiply() add() p5 = pop() m-- x-- moveTos h push(p5) restore()