mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
@@ -2315,7 +2315,33 @@ RETRY_TRY_BLOCK:
|
||||
{
|
||||
mrb_int x = mrb_fixnum(regs[a]);
|
||||
mrb_int y = mrb_fixnum(regs[a+1]);
|
||||
SET_INT_VALUE(regs[a], y ? x / y : 0);
|
||||
if (y == 0 || (x == MRB_INT_MIN && y == -1)) {
|
||||
#ifdef MRB_NO_FLOAT
|
||||
SET_INT_VALUE(regs[a], y ? x / y : 0);
|
||||
#else
|
||||
SET_FLOAT_VALUE(mrb, regs[a], (mrb_float)x / (mrb_float)y);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
mrb_int div, mod;
|
||||
if (y < 0) {
|
||||
if (x < 0)
|
||||
div = -x / -y;
|
||||
else
|
||||
div = - (x / -y);
|
||||
}
|
||||
else {
|
||||
if (x < 0)
|
||||
div = - (-x / y);
|
||||
else
|
||||
div = x / y;
|
||||
}
|
||||
mod = x - div*y;
|
||||
if ((mod < 0 && y > 0) || (mod > 0 && y < 0)) {
|
||||
div -= 1;
|
||||
}
|
||||
SET_INT_VALUE(regs[a], div);
|
||||
}
|
||||
}
|
||||
NEXT;
|
||||
#ifndef MRB_NO_FLOAT
|
||||
|
||||
Reference in New Issue
Block a user