summaryrefslogtreecommitdiffhomepage
path: root/src/numeric.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/numeric.c')
-rw-r--r--src/numeric.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/numeric.c b/src/numeric.c
index ab6632e52..b8e207a74 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -1121,7 +1121,12 @@ int_mod(mrb_state *mrb, mrb_value x)
if (mrb_integer_p(y) && a != MRB_INT_MIN && (b=mrb_integer(y)) != MRB_INT_MIN) {
mrb_int mod;
- fixdivmod(mrb, a, b, NULL, &mod);
+ if (a >= 0 && b >= 0) {
+ mod = a % b;
+ }
+ else {
+ fixdivmod(mrb, a, b, NULL, &mod);
+ }
return mrb_fixnum_value(mod);
}
#ifdef MRB_NO_FLOAT