From a66888b6e07dbfd6b22dcd7fa9e240692c17a039 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 26 Feb 2017 07:33:09 -0800 Subject: New floor-rem, ceil-rem and round-rem. * arith.c (trunc_rem): Move function to below round function. Make second argument optional, defaulting to one. (floor_rem, ceil_rem, round_rem): New functions. * eval.c (eval_init): Registration of trunc-rem altered for optional argument. New registrations for floor-rem, ceil-rem, round=rem. * txr.1: Documented for new functions folded with trunc-rem. --- arith.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'arith.c') diff --git a/arith.c b/arith.c index 483efa15..1dff8eb6 100644 --- a/arith.c +++ b/arith.c @@ -1090,13 +1090,6 @@ divzero: uw_throw(numeric_error_s, lit("mod: division by zero")); } -val trunc_rem(val anum, val bnum) -{ - val quot = trunc(anum, bnum); - val rem = minus(anum, mul(quot, bnum)); - return list(quot, rem, nao); -} - val floordiv(val anum, val bnum) { if (missingp(bnum)) @@ -1312,6 +1305,34 @@ val roundiv(val anum, val bnum) } } +val trunc_rem(val anum, val bnum) +{ + val quot = trunc(anum, bnum); + val rem = minus(anum, mul(quot, if3(missingp(bnum), one, bnum))); + return list(quot, rem, nao); +} + +val floor_rem(val anum, val bnum) +{ + val quot = floordiv(anum, bnum); + val rem = minus(anum, mul(quot, if3(missingp(bnum), one, bnum))); + return list(quot, rem, nao); +} + +val ceil_rem(val anum, val bnum) +{ + val quot = ceildiv(anum, bnum); + val rem = minus(anum, mul(quot, if3(missingp(bnum), one, bnum))); + return list(quot, rem, nao); +} + +val round_rem(val anum, val bnum) +{ + val quot = roundiv(anum, bnum); + val rem = minus(anum, mul(quot, if3(missingp(bnum), one, bnum))); + return list(quot, rem, nao); +} + val wrap_star(val start, val end, val num) { val modulus = minus(end, start); -- cgit v1.2.3