UNPKG

545 Btext/coffeescriptView Raw
1# Add rational numbers
2#
3# Input: tos-2 addend
4#
5# tos-1 addend
6#
7# Output: sum on stack
8
9
10
11qadd = ->
12 # a, ab, b, ba, c are all bigNum
13
14 save()
15
16 p2 = pop()
17 p1 = pop()
18
19 ab = mmul(p1.q.a, p2.q.b)
20 ba = mmul(p1.q.b, p2.q.a)
21
22 a = madd(ab, ba)
23
24 #mfree(ab)
25 #mfree(ba)
26
27 # zero?
28
29 if (MZERO(a))
30 #mfree(a)
31 push(zero)
32 restore()
33 return
34
35 b = mmul(p1.q.b, p2.q.b)
36
37 c = mgcd(a, b)
38
39 c = makeSignSameAs(c,b)
40
41 p1 = new U()
42
43 p1.k = NUM
44
45 p1.q.a = mdiv(a, c)
46 p1.q.b = mdiv(b, c)
47
48 #mfree(a)
49 #mfree(b)
50 #mfree(c)
51
52 push(p1)
53
54 restore()