UNPKG

461 Btext/coffeescriptView Raw
1# Divide rational numbers
2#
3# Input: tos-2 dividend
4#
5# tos-1 divisor
6#
7# Output: quotient on stack
8
9
10
11qdiv = ->
12 save()
13
14 p2 = pop()
15 p1 = pop()
16
17 # zero?
18
19 if (MZERO(p2.q.a))
20 stop("divide by zero")
21
22 if (MZERO(p1.q.a))
23 push(zero)
24 restore()
25 return
26
27 aa = mmul(p1.q.a, p2.q.b)
28 bb = mmul(p1.q.b, p2.q.a)
29
30 c = mgcd(aa, bb)
31
32 c = makeSignSameAs(c,bb)
33
34 p1 = new U()
35
36 p1.k = NUM
37
38 p1.q.a = mdiv(aa, c)
39 p1.q.b = mdiv(bb, c)
40
41
42 push(p1)
43
44 restore()