diff options
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); |