Little fix after the last commit (mostly a git fail)
[eigenmath-fx.git] / qdiv.cpp
blobba90c42ff15b45be0faf5c81b0ac486f6b8db907
1 // Divide rational numbers
2 //
3 // Input: tos-2 dividend
4 //
5 // tos-1 divisor
6 //
7 // Output: quotient on stack
9 #include "stdafx.h"
10 #include "defs.h"
12 void
13 qdiv(void)
15 unsigned int *aa, *bb, *c;
17 save();
19 p2 = pop();
20 p1 = pop();
22 // zero?
24 if (MZERO(p2->u.q.a))
25 stop("divide by zero");
27 if (MZERO(p1->u.q.a)) {
28 push(zero);
29 restore();
30 return;
33 aa = mmul(p1->u.q.a, p2->u.q.b);
34 bb = mmul(p1->u.q.b, p2->u.q.a);
36 c = mgcd(aa, bb);
38 MSIGN(c) = MSIGN(bb);
40 p1 = alloc();
42 p1->k = NUM;
44 p1->u.q.a = mdiv(aa, c);
45 p1->u.q.b = mdiv(bb, c);
47 mfree(aa);
48 mfree(bb);
49 mfree(c);
51 push(p1);
53 restore();