UNPKG

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