diff options
author | Damien George <damien.p.george@gmail.com> | 2014-03-22 20:34:22 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-03-22 20:34:22 +0000 |
commit | 4ab128bbee5d0b0d05fec897182eef6a3a2e629f (patch) | |
tree | a77e126adcea8ac1057e33bf528dee9be382851f /py/intdivmod.c | |
parent | 365274da13cc701e3e8f6c72a24dd4eb4083a88d (diff) | |
parent | 26a4506da7725ce88f05361214b705b157630e2c (diff) | |
download | micropython-4ab128bbee5d0b0d05fec897182eef6a3a2e629f.tar.gz micropython-4ab128bbee5d0b0d05fec897182eef6a3a2e629f.zip |
Merge branch 'master' of github.com:micropython/micropython
Diffstat (limited to 'py/intdivmod.c')
-rw-r--r-- | py/intdivmod.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/py/intdivmod.c b/py/intdivmod.c new file mode 100644 index 0000000000..4cb363b511 --- /dev/null +++ b/py/intdivmod.c @@ -0,0 +1,24 @@ +#include "mpconfig.h" + +machine_int_t python_modulo(machine_int_t dividend, machine_int_t divisor) { + machine_int_t lsign = (dividend >= 0) ? 1 :-1; + machine_int_t rsign = (divisor >= 0) ? 1 :-1; + dividend %= divisor; + if (lsign != rsign) { + dividend += divisor; + } + return dividend; +} + + +machine_int_t python_floor_divide(machine_int_t num, machine_int_t denom) { + machine_int_t lsign = num > 0 ? 1 : -1; + machine_int_t rsign = denom > 0 ? 1 : -1; + if (lsign == -1) {num *= -1;} + if (rsign == -1) {denom *= -1;} + if (lsign != rsign){ + return - ( num + denom - 1) / denom; + } else { + return num / denom; + } +} |