algebrite
Version:
Computer Algebra System in Coffeescript
45 lines (28 loc) • 461 B
text/coffeescript
# Divide rational numbers
#
# Input: tos-2 dividend
#
# tos-1 divisor
#
# Output: quotient on stack
qdiv = ->
save()
p2 = pop()
p1 = pop()
# zero?
if (MZERO(p2.q.a))
stop("divide by zero")
if (MZERO(p1.q.a))
push(zero)
restore()
return
aa = mmul(p1.q.a, p2.q.b)
bb = mmul(p1.q.b, p2.q.a)
c = mgcd(aa, bb)
c = makeSignSameAs(c,bb)
p1 = new U()
p1.k = NUM
p1.q.a = mdiv(aa, c)
p1.q.b = mdiv(bb, c)
push(p1)
restore()