summaryrefslogtreecommitdiffstats
path: root/arith.c
diff options
context:
space:
mode:
Diffstat (limited to 'arith.c')
-rw-r--r--arith.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/arith.c b/arith.c
index 76066d63..7699ad11 100644
--- a/arith.c
+++ b/arith.c
@@ -1375,8 +1375,11 @@ val gcd(val anum, val bnum)
if (!integerp(anum) || !integerp(bnum))
goto inval;
- if (zerop(anum))
- return zero;
+ if (anum == zero)
+ return bnum;
+
+ if (bnum == zero)
+ return anum;
if (fixnump(anum))
anum = bignum(c_num(anum));
@@ -1398,6 +1401,17 @@ bad:
anum, bnum, nao);
}
+val lcm(val anum, val bnum)
+{
+ if (anum == zero || bnum == zero) {
+ return zero;
+ } else {
+ val prod = mul(anum, bnum);
+ val gcdv = gcd(anum, bnum);
+ return abso(trunc(prod, gcdv));
+ }
+}
+
val floorf(val num)
{
if (integerp(num))