diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-02-26 07:33:09 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-02-26 07:33:09 -0800 |
commit | a66888b6e07dbfd6b22dcd7fa9e240692c17a039 (patch) | |
tree | 251e76409dbe78994bd4eb9ed4ea7237020bd47e /arith.c | |
parent | 0f32fe85728e4ee35a25094d99bdf7b3ff1630a7 (diff) | |
download | txr-a66888b6e07dbfd6b22dcd7fa9e240692c17a039.tar.gz txr-a66888b6e07dbfd6b22dcd7fa9e240692c17a039.tar.bz2 txr-a66888b6e07dbfd6b22dcd7fa9e240692c17a039.zip |
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.
Diffstat (limited to 'arith.c')
-rw-r--r-- | arith.c | 35 |
1 files changed, 28 insertions, 7 deletions
@@ -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); |