Little fix after the last commit (mostly a git fail)
[eigenmath-fx.git] / qmul.cpp
blob8fa4e9584db97fefbc79097c07423868a1669508
1 // Multiply rational numbers
2 //
3 // Input: tos-2 multiplicand
4 //
5 // tos-1 multiplier
6 //
7 // Output: product on stack
9 #include "stdafx.h"
10 #include "defs.h"
12 void
13 qmul(void)
15 unsigned int *aa, *bb, *c;
17 save();
19 p2 = pop();
20 p1 = pop();
22 // zero?
24 if (MZERO(p1->u.q.a) || MZERO(p2->u.q.a)) {
25 push(zero);
26 restore();
27 return;
30 aa = mmul(p1->u.q.a, p2->u.q.a);
31 bb = mmul(p1->u.q.b, p2->u.q.b);
33 c = mgcd(aa, bb);
35 MSIGN(c) = MSIGN(bb);
37 p1 = alloc();
39 p1->k = NUM;
41 p1->u.q.a = mdiv(aa, c);
42 p1->u.q.b = mdiv(bb, c);
44 mfree(aa);
45 mfree(bb);
46 mfree(c);
48 push(p1);
50 restore();