diff --git a/jerry-core/ecma/base/ecma-helpers-number.cpp b/jerry-core/ecma/base/ecma-helpers-number.cpp index b09e79cdb..8b7d1a340 100644 --- a/jerry-core/ecma/base/ecma-helpers-number.cpp +++ b/jerry-core/ecma/base/ecma-helpers-number.cpp @@ -683,7 +683,15 @@ ecma_number_calc_remainder (ecma_number_t left_num, /**< left operand */ ecma_number_t q = ecma_number_trunc (ecma_number_divide (n, d)); - return ecma_number_substract (n, ecma_number_multiply (d, q)); + ecma_number_t r = ecma_number_substract (n, ecma_number_multiply (d, q)); + + if (ecma_number_is_zero (r) + && ecma_number_is_negative (n)) + { + r = ecma_number_negate (r); + } + + return r; } /* ecma_number_calc_remainder */ /** diff --git a/tests/jerry/arithmetics.js b/tests/jerry/arithmetics.js index 0c871ba87..cdbaa9527 100644 --- a/tests/jerry/arithmetics.js +++ b/tests/jerry/arithmetics.js @@ -32,3 +32,8 @@ assert((number % 79) == 2); var num1 = 1234567, num2 = 1234000; assert((num1 % num2) == 567); + +assert (1 / (-1 % -1) < 0); +assert (1 / (-1 % 1) < 0); +assert (1 / (1 % -1) > 0); +assert (1 / (1 % 1) > 0);